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 ''; - - 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 ''; + + 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); + } +}