diff --git a/snappymail/v/0.0.0/check.php b/snappymail/v/0.0.0/check.php
deleted file mode 100644
index 694905385..000000000
--- a/snappymail/v/0.0.0/check.php
+++ /dev/null
@@ -1,104 +0,0 @@
-';
- echo '[301] Your PHP version ('.PHP_VERSION.') is lower than the minimal required 7.3.0!';
- echo '
';
- exit(301);
- }
-
- $aOptional = array(
- 'cURL' => extension_loaded('curl'),
- 'gd' => extension_loaded('gd'),
- 'gmagick' => extension_loaded('gmagick'),
- 'imagick' => extension_loaded('imagick'),
- 'intl' => function_exists('idn_to_ascii'),
- 'ldap' => extension_loaded('ldap'),
- 'OpenSSL' => extension_loaded('openssl'),
- 'mysql' => extension_loaded('pdo_mysql'),
- 'pgsql' => extension_loaded('pdo_pgsql'),
- 'Sodium' => extension_loaded('sodium'),
- 'sqlite' => extension_loaded('pdo_sqlite'),
- 'xxtea' => extension_loaded('xxtea'),
- 'zip' => extension_loaded('zip')
- );
-
- $aRequirements = array(
- 'mbstring' => extension_loaded('mbstring'),
- 'Zlib' => extension_loaded('zlib'),
- // enabled by default:
- 'json' => function_exists('json_decode'),
- 'libxml' => function_exists('libxml_use_internal_errors'),
- 'dom' => class_exists('DOMDocument')
- );
-
- if (in_array(false, $aRequirements))
- {
- echo '[302] The following PHP extensions are not available in your PHP configuration!
';
-
- echo '';
- foreach ($aRequirements as $sKey => $bValue)
- {
- if (!$bValue)
- {
- echo '- '.$sKey.'
';
- }
- }
- echo '
';
-
- exit(302);
- }
-
- $sCheckName = 'delete_if_you_see_it_after_install';
- $sCheckFolder = APP_DATA_FOLDER_PATH.$sCheckName;
- $sCheckFilePath = APP_DATA_FOLDER_PATH.$sCheckName.'/'.$sCheckName.'.file';
-
- is_file($sCheckFilePath) && unlink($sCheckFilePath);
- is_dir($sCheckFolder) && rmdir($sCheckFolder);
-
- if (!is_dir(APP_DATA_FOLDER_PATH))
- {
- mkdir(APP_DATA_FOLDER_PATH, 0700, true);
- }
- else
- {
- chmod(APP_DATA_FOLDER_PATH, 0700);
- }
-
- $sTest = '';
- switch (true)
- {
- case !is_dir(APP_DATA_FOLDER_PATH):
- $sTest = 'is_dir';
- break;
- case !is_readable(APP_DATA_FOLDER_PATH):
- $sTest = 'is_readable';
- break;
- case !is_writable(APP_DATA_FOLDER_PATH):
- $sTest = 'is_writable';
- break;
- case !mkdir($sCheckFolder, 0700):
- $sTest = 'mkdir';
- break;
- case false === file_put_contents($sCheckFilePath, time()):
- $sTest = 'file_put_contents';
- break;
- case !unlink($sCheckFilePath):
- $sTest = 'unlink';
- break;
- case !rmdir($sCheckFolder):
- $sTest = 'rmdir';
- break;
- }
-
- if (!empty($sTest))
- {
- echo '[202] Data folder permissions error ['.$sTest.']';
- exit(202);
- }
-
- unset($sCheckName, $sCheckFilePath, $sCheckFolder, $sTest);
- }
diff --git a/snappymail/v/0.0.0/include.php b/snappymail/v/0.0.0/include.php
index 4d98539db..154ea845d 100644
--- a/snappymail/v/0.0.0/include.php
+++ b/snappymail/v/0.0.0/include.php
@@ -62,6 +62,7 @@ if (defined('MULTIDOMAIN')) {
$sPrivateDataFolderInternalName = in_array($sPrivateDataFolderInternalName, array('', '127.0.0.1', '::1')) ? 'localhost' : $sPrivateDataFolderInternalName;
}
define('APP_PRIVATE_DATA_NAME', $sPrivateDataFolderInternalName ?: '_default_');
+unset($sPrivateDataFolderInternalName);
defined('APP_USE_APCU_CACHE') || define('APP_USE_APCU_CACHE', true);
@@ -77,25 +78,8 @@ if (!defined('APP_CONFIGURATION_NAME')) {
unset($sCustomConfiguration);
}
-// installation checking data folder
-$sInstalled = is_file(APP_DATA_FOLDER_PATH.'INSTALLED') ? file_get_contents(APP_DATA_FOLDER_PATH.'INSTALLED') : '';
-if (APP_VERSION !== $sInstalled)
-{
- include APP_VERSION_ROOT_PATH.'check.php';
-}
-
-$sSalt = is_file(APP_DATA_FOLDER_PATH.'SALT.php') ? trim(file_get_contents(APP_DATA_FOLDER_PATH.'SALT.php')) : '';
-if (!$sSalt)
-{
- // random salt
- $sSalt = '<'.'?php //'.bin2hex(random_bytes(48));
- file_put_contents(APP_DATA_FOLDER_PATH.'SALT.php', $sSalt);
-}
-define('APP_SALT', md5($sSalt.APP_PRIVATE_DATA_NAME.$sSalt));
-
$sData = is_file(APP_DATA_FOLDER_PATH.'DATA.php') ? file_get_contents(APP_DATA_FOLDER_PATH.'DATA.php') : '';
define('APP_PRIVATE_DATA', APP_DATA_FOLDER_PATH.'_data_'.($sData ? md5($sData) : '').'/'.APP_PRIVATE_DATA_NAME.'/');
-
define('APP_PLUGINS_PATH', APP_PRIVATE_DATA.'plugins/');
ini_set('default_charset', 'UTF-8');
@@ -103,65 +87,22 @@ ini_set('internal_encoding', 'UTF-8');
mb_internal_encoding('UTF-8');
mb_language('uni');
-if (APP_VERSION !== $sInstalled || (!is_dir(APP_PRIVATE_DATA) && strlen($sPrivateDataFolderInternalName) && '_default_' !== APP_PRIVATE_DATA_NAME))
+// installation checking data folder
+if (APP_VERSION !== (is_file(APP_DATA_FOLDER_PATH.'INSTALLED') ? file_get_contents(APP_DATA_FOLDER_PATH.'INSTALLED') : '')
+ || !is_dir(APP_PRIVATE_DATA))
{
- file_put_contents(APP_DATA_FOLDER_PATH.'INSTALLED', APP_VERSION);
- file_put_contents(APP_DATA_FOLDER_PATH.'VERSION', APP_VERSION);
- file_put_contents(APP_DATA_FOLDER_PATH.'index.html', 'Forbidden');
- file_put_contents(APP_DATA_FOLDER_PATH.'index.php', 'Forbidden');
-
- if (!is_file(APP_DATA_FOLDER_PATH.'.htaccess') && is_file(APP_VERSION_ROOT_PATH.'app/.htaccess'))
- {
- copy(APP_VERSION_ROOT_PATH.'app/.htaccess', APP_DATA_FOLDER_PATH.'.htaccess');
- }
-
- if (!is_dir(APP_PRIVATE_DATA))
- {
- mkdir(APP_PRIVATE_DATA, 0755, true);
- file_put_contents(APP_PRIVATE_DATA.'.htaccess', 'Require all denied');
- }
-
- else if (is_dir(APP_PRIVATE_DATA.'cache'))
- {
- foreach (new RecursiveIteratorIterator(
- new RecursiveDirectoryIterator(APP_PRIVATE_DATA.'cache', FilesystemIterator::SKIP_DOTS),
- RecursiveIteratorIterator::CHILD_FIRST) as $value) {
- $value->isDir() ? rmdir($value) : unlink($value);
- }
- clearstatcache();
- }
-
- foreach (array('logs', 'cache', 'configs', 'domains', 'plugins', 'storage') as $sName)
- {
- if (!is_dir(APP_PRIVATE_DATA.$sName))
- {
- mkdir(APP_PRIVATE_DATA.$sName, 0700, true);
- }
- }
-
- if (!file_exists(APP_PRIVATE_DATA.'domains/disabled') && is_dir(APP_PRIVATE_DATA.'domains'))
- {
- $sFile = $sNewFile = '';
- $aFiles = glob(APP_VERSION_ROOT_PATH.'app/domains/*');
- if (is_array($aFiles) && count($aFiles))
- {
- foreach ($aFiles as $sFile)
- {
- if (is_file($sFile))
- {
- $sNewFile = APP_PRIVATE_DATA.'domains/'.basename($sFile);
- if (!file_exists($sNewFile))
- {
- copy($sFile, $sNewFile);
- }
- }
- }
- }
- unset($aFiles, $sFile, $sNewFile);
- }
+ include APP_VERSION_ROOT_PATH.'setup.php';
}
-unset($sSalt, $sData, $sInstalled, $sPrivateDataFolderInternalName);
+$sSalt = is_file(APP_DATA_FOLDER_PATH.'SALT.php') ? trim(file_get_contents(APP_DATA_FOLDER_PATH.'SALT.php')) : '';
+if (!$sSalt) {
+ // random salt
+ $sSalt = '<'.'?php //'.bin2hex(random_bytes(48));
+ file_put_contents(APP_DATA_FOLDER_PATH.'SALT.php', $sSalt);
+}
+define('APP_SALT', md5($sSalt.APP_PRIVATE_DATA_NAME.$sSalt));
+
+unset($sSalt, $sData);
if (!isset($_SERVER['HTTP_USER_AGENT'])) {
$_SERVER['HTTP_USER_AGENT'] = '';
diff --git a/snappymail/v/0.0.0/setup.php b/snappymail/v/0.0.0/setup.php
new file mode 100644
index 000000000..bf0ecff0f
--- /dev/null
+++ b/snappymail/v/0.0.0/setup.php
@@ -0,0 +1,156 @@
+';
+ echo '[301] Your PHP version ('.PHP_VERSION.') is lower than the minimal required 7.3.0!';
+ echo '';
+ exit(301);
+ }
+
+ $aOptional = array(
+ 'cURL' => extension_loaded('curl'),
+ 'gd' => extension_loaded('gd'),
+ 'gmagick' => extension_loaded('gmagick'),
+ 'imagick' => extension_loaded('imagick'),
+ 'intl' => function_exists('idn_to_ascii'),
+ 'ldap' => extension_loaded('ldap'),
+ 'OpenSSL' => extension_loaded('openssl'),
+ 'mysql' => extension_loaded('pdo_mysql'),
+ 'pgsql' => extension_loaded('pdo_pgsql'),
+ 'Sodium' => extension_loaded('sodium'),
+ 'sqlite' => extension_loaded('pdo_sqlite'),
+ 'xxtea' => extension_loaded('xxtea'),
+ 'zip' => extension_loaded('zip')
+ );
+
+ $aRequirements = array(
+ 'mbstring' => extension_loaded('mbstring'),
+ 'Zlib' => extension_loaded('zlib'),
+ // enabled by default:
+ 'json' => function_exists('json_decode'),
+ 'libxml' => function_exists('libxml_use_internal_errors'),
+ 'dom' => class_exists('DOMDocument')
+ );
+
+ if (in_array(false, $aRequirements))
+ {
+ echo '[302] The following PHP extensions are not available in your PHP configuration!
';
+
+ echo '';
+ foreach ($aRequirements as $sKey => $bValue)
+ {
+ if (!$bValue)
+ {
+ echo '- '.$sKey.'
';
+ }
+ }
+ echo '
';
+
+ exit(302);
+ }
+
+ $sCheckName = 'delete_if_you_see_it_after_install';
+ $sCheckFolder = APP_DATA_FOLDER_PATH.$sCheckName;
+ $sCheckFilePath = APP_DATA_FOLDER_PATH.$sCheckName.'/'.$sCheckName.'.file';
+
+ is_file($sCheckFilePath) && unlink($sCheckFilePath);
+ is_dir($sCheckFolder) && rmdir($sCheckFolder);
+
+ if (!is_dir(APP_DATA_FOLDER_PATH))
+ {
+ mkdir(APP_DATA_FOLDER_PATH, 0700, true);
+ }
+ else
+ {
+ chmod(APP_DATA_FOLDER_PATH, 0700);
+ }
+
+ $sTest = '';
+ switch (true)
+ {
+ case !is_dir(APP_DATA_FOLDER_PATH):
+ $sTest = 'is_dir';
+ break;
+ case !is_readable(APP_DATA_FOLDER_PATH):
+ $sTest = 'is_readable';
+ break;
+ case !is_writable(APP_DATA_FOLDER_PATH):
+ $sTest = 'is_writable';
+ break;
+ case !mkdir($sCheckFolder, 0700):
+ $sTest = 'mkdir';
+ break;
+ case false === file_put_contents($sCheckFilePath, time()):
+ $sTest = 'file_put_contents';
+ break;
+ case !unlink($sCheckFilePath):
+ $sTest = 'unlink';
+ break;
+ case !rmdir($sCheckFolder):
+ $sTest = 'rmdir';
+ break;
+ }
+
+ if (!empty($sTest))
+ {
+ echo '[202] Data folder permissions error ['.$sTest.']';
+ exit(202);
+ }
+
+ unset($sCheckName, $sCheckFilePath, $sCheckFolder, $sTest);
+
+ file_put_contents(APP_DATA_FOLDER_PATH.'INSTALLED', APP_VERSION);
+ file_put_contents(APP_DATA_FOLDER_PATH.'index.html', 'Forbidden');
+ file_put_contents(APP_DATA_FOLDER_PATH.'index.php', 'Forbidden');
+ if (!is_file(APP_DATA_FOLDER_PATH.'.htaccess') && is_file(APP_VERSION_ROOT_PATH.'app/.htaccess'))
+ {
+ copy(APP_VERSION_ROOT_PATH.'app/.htaccess', APP_DATA_FOLDER_PATH.'.htaccess');
+ }
+
+ if (!is_dir(APP_PRIVATE_DATA))
+ {
+ mkdir(APP_PRIVATE_DATA, 0700, true);
+ file_put_contents(APP_PRIVATE_DATA.'.htaccess', 'Require all denied');
+ }
+ else if (is_dir(APP_PRIVATE_DATA.'cache'))
+ {
+ foreach (new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator(APP_PRIVATE_DATA.'cache', FilesystemIterator::SKIP_DOTS),
+ RecursiveIteratorIterator::CHILD_FIRST) as $sName) {
+ $sName->isDir() ? rmdir($sName) : unlink($sName);
+ }
+ clearstatcache();
+ }
+
+ foreach (array('logs', 'cache', 'configs', 'domains', 'plugins', 'storage') as $sName)
+ {
+ if (!is_dir(APP_PRIVATE_DATA.$sName))
+ {
+ mkdir(APP_PRIVATE_DATA.$sName, 0700, true);
+ }
+ }
+
+ if (!file_exists(APP_PRIVATE_DATA.'domains/disabled') && is_dir(APP_PRIVATE_DATA.'domains'))
+ {
+ $sFile = $sNewFile = '';
+ $aFiles = glob(APP_VERSION_ROOT_PATH.'app/domains/*');
+ if ($aFiles)
+ {
+ foreach ($aFiles as $sFile)
+ {
+ if (is_file($sFile))
+ {
+ $sNewFile = APP_PRIVATE_DATA.'domains/'.basename($sFile);
+ if (!file_exists($sNewFile))
+ {
+ copy($sFile, $sNewFile);
+ }
+ }
+ }
+ }
+ unset($aFiles, $sFile, $sNewFile);
+ }
+}