mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Improved app booting
Bugfix SALT.php failed on initialization Cleanup unused and obsolete constants and php settings
This commit is contained in:
parent
b80e62adfc
commit
f92d453e8b
8 changed files with 279 additions and 319 deletions
|
|
@ -3,12 +3,12 @@
|
||||||
if (!defined('APP_VERSION'))
|
if (!defined('APP_VERSION'))
|
||||||
{
|
{
|
||||||
define('APP_VERSION', '0.0.0');
|
define('APP_VERSION', '0.0.0');
|
||||||
define('APP_INDEX_ROOT_PATH', strtr(__DIR__, DIRECTORY_SEPARATOR, '/') . '/');
|
define('APP_INDEX_ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_exists(APP_INDEX_ROOT_PATH.'snappymail/v/'.APP_VERSION.'/include.php'))
|
if (file_exists('snappymail/v/'.APP_VERSION.'/include.php'))
|
||||||
{
|
{
|
||||||
include APP_INDEX_ROOT_PATH.'snappymail/v/'.APP_VERSION.'/include.php';
|
include 'snappymail/v/'.APP_VERSION.'/include.php';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
if (!\defined('RAINLOOP_APP_LIBRARIES_PATH'))
|
|
||||||
{
|
|
||||||
\define('RAINLOOP_APP_PATH', \rtrim(\realpath(__DIR__), '\\/').'/');
|
|
||||||
\define('RAINLOOP_APP_LIBRARIES_PATH', RAINLOOP_APP_PATH.'libraries/');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $sClassName
|
|
||||||
*/
|
|
||||||
function rainLoopSplAutoloadRegisterFunction($sClassName) : void
|
|
||||||
{
|
|
||||||
/** case-sensitive autoload */
|
|
||||||
$file = \strtr($sClassName, '\\', DIRECTORY_SEPARATOR) . '.php';
|
|
||||||
// if ($file = \stream_resolve_include_path($file)) {
|
|
||||||
if (\is_file(RAINLOOP_APP_LIBRARIES_PATH . $file)) {
|
|
||||||
include_once RAINLOOP_APP_LIBRARIES_PATH . $file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false === \set_include_path(RAINLOOP_APP_LIBRARIES_PATH . PATH_SEPARATOR . \get_include_path())) {
|
|
||||||
exit('set_include_path() failed. Probably due to Apache config using php_admin_value instead of php_value');
|
|
||||||
}
|
|
||||||
\spl_autoload_extensions('.php');
|
|
||||||
\spl_autoload_register();
|
|
||||||
\spl_autoload_register('rainLoopSplAutoloadRegisterFunction');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (\class_exists('RainLoop\Api'))
|
|
||||||
{
|
|
||||||
if (!empty($_ENV['RAINLOOP_INCLUDE_AS_API']))
|
|
||||||
{
|
|
||||||
if (!\defined('APP_API_STARTED'))
|
|
||||||
{
|
|
||||||
\define('APP_API_STARTED', true);
|
|
||||||
|
|
||||||
\RainLoop\Api::Handle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!\defined('APP_STARTED'))
|
|
||||||
{
|
|
||||||
\define('APP_STARTED', true);
|
|
||||||
|
|
||||||
\RainLoop\Api::Handle();
|
|
||||||
\RainLoop\Service::Handle();
|
|
||||||
|
|
||||||
\RainLoop\Api::ExitOnEnd();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (\function_exists('rainLoopSplAutoloadRegisterFunction'))
|
|
||||||
{
|
|
||||||
\spl_autoload_unregister('rainLoopSplAutoloadRegisterFunction');
|
|
||||||
}
|
|
||||||
|
|
@ -9,6 +9,8 @@ use RainLoop\KeyPathHelper;
|
||||||
use RainLoop\Notifications;
|
use RainLoop\Notifications;
|
||||||
use RainLoop\Utils;
|
use RainLoop\Utils;
|
||||||
|
|
||||||
|
//define('APP_DEV_VERSION', '0.0.0');
|
||||||
|
|
||||||
trait Admin
|
trait Admin
|
||||||
{
|
{
|
||||||
private static $AUTH_ADMIN_TOKEN_KEY = 'smadmin';
|
private static $AUTH_ADMIN_TOKEN_KEY = 'smadmin';
|
||||||
|
|
@ -556,11 +558,11 @@ trait Admin
|
||||||
if ($oItem && isset($oItem->type, $oItem->id, $oItem->name,
|
if ($oItem && isset($oItem->type, $oItem->id, $oItem->name,
|
||||||
$oItem->version, $oItem->release, $oItem->file, $oItem->description))
|
$oItem->version, $oItem->release, $oItem->file, $oItem->description))
|
||||||
{
|
{
|
||||||
if (!empty($oItem->required) && APP_DEV_VERSION !== APP_VERSION && version_compare(APP_VERSION, $oItem->required, '<')) {
|
if (!empty($oItem->required) && '0.0.0' !== APP_VERSION && version_compare(APP_VERSION, $oItem->required, '<')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($oItem->depricated) && APP_DEV_VERSION !== APP_VERSION && version_compare(APP_VERSION, $oItem->depricated, '>=')) {
|
if (!empty($oItem->depricated) && '0.0.0' !== APP_VERSION && version_compare(APP_VERSION, $oItem->depricated, '>=')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -630,7 +632,7 @@ trait Admin
|
||||||
$bRainLoopUpdatable = \file_exists(APP_INDEX_ROOT_PATH.'index.php')
|
$bRainLoopUpdatable = \file_exists(APP_INDEX_ROOT_PATH.'index.php')
|
||||||
&& \is_writable(APP_INDEX_ROOT_PATH.'index.php')
|
&& \is_writable(APP_INDEX_ROOT_PATH.'index.php')
|
||||||
&& \is_writable(APP_INDEX_ROOT_PATH.'snappymail/')
|
&& \is_writable(APP_INDEX_ROOT_PATH.'snappymail/')
|
||||||
&& APP_VERSION !== APP_DEV_VERSION;
|
&& APP_VERSION !== '0.0.0';
|
||||||
|
|
||||||
// \uksort($aList, function($a, $b){return \strcasecmp($a['name'], $b['name']);});
|
// \uksort($aList, function($a, $b){return \strcasecmp($a['name'], $b['name']);});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -211,12 +211,4 @@ class Api
|
||||||
Utils::ClearCookie(Utils::SESSION_TOKEN);
|
Utils::ClearCookie(Utils::SESSION_TOKEN);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function ExitOnEnd() : void
|
|
||||||
{
|
|
||||||
if (!\defined('SNAPPYMAIL_EXIT_ON_END'))
|
|
||||||
{
|
|
||||||
\define('SNAPPYMAIL_EXIT_ON_END', true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ class Application extends \RainLoop\Config\AbstractConfig
|
||||||
parent::__construct('application.ini',
|
parent::__construct('application.ini',
|
||||||
'; SnappyMail configuration file
|
'; SnappyMail configuration file
|
||||||
; Please don\'t add custom parameters here, those will be overwritten',
|
; Please don\'t add custom parameters here, those will be overwritten',
|
||||||
defined('APP_ADDITIONAL_CONFIGURATION_NAME') ? APP_ADDITIONAL_CONFIGURATION_NAME : '');
|
APP_CONFIGURATION_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Load() : bool
|
public function Load() : bool
|
||||||
|
|
|
||||||
|
|
@ -222,7 +222,9 @@ class Service
|
||||||
|
|
||||||
private function setCSP(string $sScriptNonce = null) : void
|
private function setCSP(string $sScriptNonce = null) : void
|
||||||
{
|
{
|
||||||
$sContentSecurityPolicy = \trim($this->oActions->Config()->Get('security', 'content_security_policy', '')) ?: APP_DEFAULT_CSP;
|
// "img-src https:" is allowed due to remote images in e-mails
|
||||||
|
$sContentSecurityPolicy = \trim($this->oActions->Config()->Get('security', 'content_security_policy', ''))
|
||||||
|
?: "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data: https: http:; style-src 'self' 'unsafe-inline'";
|
||||||
if ($this->oActions->Config()->Get('security', 'use_local_proxy_for_external_images', '')) {
|
if ($this->oActions->Config()->Get('security', 'use_local_proxy_for_external_images', '')) {
|
||||||
$sContentSecurityPolicy = \preg_replace('/(img-src[^;]+)\\shttps:(\\s|;|$)/D', '$1$2', $sContentSecurityPolicy);
|
$sContentSecurityPolicy = \preg_replace('/(img-src[^;]+)\\shttps:(\\s|;|$)/D', '$1$2', $sContentSecurityPolicy);
|
||||||
$sContentSecurityPolicy = \preg_replace('/(img-src[^;]+)\\shttp:(\\s|;|$)/D', '$1$2', $sContentSecurityPolicy);
|
$sContentSecurityPolicy = \preg_replace('/(img-src[^;]+)\\shttp:(\\s|;|$)/D', '$1$2', $sContentSecurityPolicy);
|
||||||
|
|
|
||||||
|
|
@ -51,4 +51,54 @@
|
||||||
|
|
||||||
exit(302);
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
if (defined('APP_VERSION_ROOT_PATH')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (defined('APP_VERSION'))
|
|
||||||
{
|
|
||||||
// revoke permissions
|
|
||||||
umask(0077);
|
|
||||||
|
|
||||||
if (!defined('APP_VERSION_ROOT_PATH'))
|
|
||||||
{
|
|
||||||
if (function_exists('sys_getloadavg')) {
|
if (function_exists('sys_getloadavg')) {
|
||||||
$load = sys_getloadavg();
|
$load = sys_getloadavg();
|
||||||
if ($load[0] > 95) {
|
if ($load[0] > 95) {
|
||||||
|
|
@ -31,13 +27,20 @@ if (defined('APP_VERSION'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!defined('APP_VERSION')) {
|
||||||
|
define('APP_VERSION', basename(__DIR__));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined('APP_INDEX_ROOT_PATH')) {
|
||||||
|
define('APP_INDEX_ROOT_PATH', dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
// revoke permissions
|
||||||
|
umask(0077);
|
||||||
|
|
||||||
ini_set('register_globals', 0);
|
ini_set('register_globals', 0);
|
||||||
ini_set('zend.ze1_compatibility_mode', 0);
|
|
||||||
|
|
||||||
define('APP_VERSION_ROOT_PATH', APP_INDEX_ROOT_PATH.'snappymail/v/'.APP_VERSION.'/');
|
define('APP_VERSION_ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
// "img-src https:" is allowed due to remote images in e-mails
|
|
||||||
define('APP_DEFAULT_CSP', "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data: https: http:; style-src 'self' 'unsafe-inline'");
|
|
||||||
|
|
||||||
date_default_timezone_set('UTC');
|
date_default_timezone_set('UTC');
|
||||||
|
|
||||||
|
|
@ -53,7 +56,6 @@ if (defined('APP_VERSION'))
|
||||||
define('APP_PRIVATE_DATA_NAME', $sPrivateDataFolderInternalName ?: '_default_');
|
define('APP_PRIVATE_DATA_NAME', $sPrivateDataFolderInternalName ?: '_default_');
|
||||||
|
|
||||||
define('APP_DUMMY', '********');
|
define('APP_DUMMY', '********');
|
||||||
define('APP_DEV_VERSION', '0.0.0');
|
|
||||||
|
|
||||||
$sCustomDataPath = '';
|
$sCustomDataPath = '';
|
||||||
$sCustomConfiguration = '';
|
$sCustomConfiguration = '';
|
||||||
|
|
@ -66,82 +68,30 @@ if (defined('APP_VERSION'))
|
||||||
defined('APP_USE_APCU_CACHE') || define('APP_USE_APCU_CACHE', true);
|
defined('APP_USE_APCU_CACHE') || define('APP_USE_APCU_CACHE', true);
|
||||||
|
|
||||||
$sCustomDataPath = function_exists('__get_custom_data_full_path') ? rtrim(trim(__get_custom_data_full_path()), '\\/') : $sCustomDataPath;
|
$sCustomDataPath = function_exists('__get_custom_data_full_path') ? rtrim(trim(__get_custom_data_full_path()), '\\/') : $sCustomDataPath;
|
||||||
define('APP_DATA_FOLDER_PATH', 0 === strlen($sCustomDataPath) ? APP_INDEX_ROOT_PATH.'data/' : $sCustomDataPath.'/');
|
define('APP_DATA_FOLDER_PATH', strlen($sCustomDataPath) ? $sCustomDataPath.'/' : APP_INDEX_ROOT_PATH.'data/');
|
||||||
unset($sCustomDataPath);
|
unset($sCustomDataPath);
|
||||||
|
|
||||||
$sCustomConfiguration = function_exists('__get_additional_configuration_name') ? trim(__get_additional_configuration_name()) : $sCustomConfiguration;
|
define('APP_CONFIGURATION_NAME', function_exists('__get_additional_configuration_name')
|
||||||
define('APP_ADDITIONAL_CONFIGURATION_NAME', $sCustomConfiguration);
|
? trim(__get_additional_configuration_name()) : $sCustomConfiguration);
|
||||||
unset($sCustomConfiguration);
|
unset($sCustomConfiguration);
|
||||||
|
|
||||||
define('APP_DATA_FOLDER_PATH_UNIX', str_replace('\\', '/', APP_DATA_FOLDER_PATH));
|
|
||||||
|
|
||||||
$sSalt = is_file(APP_DATA_FOLDER_PATH.'SALT.php') ? trim(file_get_contents(APP_DATA_FOLDER_PATH.'SALT.php')) : '';
|
|
||||||
$sData = is_file(APP_DATA_FOLDER_PATH.'DATA.php') ? file_get_contents(APP_DATA_FOLDER_PATH.'DATA.php') : '';
|
|
||||||
$sInstalled = is_file(APP_DATA_FOLDER_PATH.'INSTALLED') ? file_get_contents(APP_DATA_FOLDER_PATH.'INSTALLED') : '';
|
|
||||||
|
|
||||||
// installation checking data folder
|
// installation checking data folder
|
||||||
|
$sInstalled = is_file(APP_DATA_FOLDER_PATH.'INSTALLED') ? file_get_contents(APP_DATA_FOLDER_PATH.'INSTALLED') : '';
|
||||||
if (APP_VERSION !== $sInstalled)
|
if (APP_VERSION !== $sInstalled)
|
||||||
{
|
{
|
||||||
include APP_VERSION_ROOT_PATH.'check.php';
|
include APP_VERSION_ROOT_PATH.'check.php';
|
||||||
|
|
||||||
$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 = '';
|
$sSalt = is_file(APP_DATA_FOLDER_PATH.'SALT.php') ? trim(file_get_contents(APP_DATA_FOLDER_PATH.'SALT.php')) : '';
|
||||||
switch (true)
|
if (!$sSalt)
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false === $sSalt)
|
|
||||||
{
|
{
|
||||||
// random salt
|
// random salt
|
||||||
file_put_contents(APP_DATA_FOLDER_PATH.'SALT.php', '<'.'?php //'.bin2hex(random_bytes(48)));
|
$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));
|
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_PRIVATE_DATA', APP_DATA_FOLDER_PATH.'_data_'.($sData ? md5($sData) : '').'/'.APP_PRIVATE_DATA_NAME.'/');
|
||||||
|
|
||||||
define('APP_PLUGINS_PATH', APP_PRIVATE_DATA.'plugins/');
|
define('APP_PLUGINS_PATH', APP_PRIVATE_DATA.'plugins/');
|
||||||
|
|
@ -153,9 +103,6 @@ if (defined('APP_VERSION'))
|
||||||
|
|
||||||
if (APP_VERSION !== $sInstalled || (!is_dir(APP_PRIVATE_DATA) && strlen($sPrivateDataFolderInternalName) && '_default_' !== APP_PRIVATE_DATA_NAME))
|
if (APP_VERSION !== $sInstalled || (!is_dir(APP_PRIVATE_DATA) && strlen($sPrivateDataFolderInternalName) && '_default_' !== APP_PRIVATE_DATA_NAME))
|
||||||
{
|
{
|
||||||
define('APP_INSTALLED_START', true);
|
|
||||||
define('APP_INSTALLED_VERSION', $sInstalled);
|
|
||||||
|
|
||||||
file_put_contents(APP_DATA_FOLDER_PATH.'INSTALLED', APP_VERSION);
|
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.'VERSION', APP_VERSION);
|
||||||
file_put_contents(APP_DATA_FOLDER_PATH.'index.html', 'Forbidden');
|
file_put_contents(APP_DATA_FOLDER_PATH.'index.html', 'Forbidden');
|
||||||
|
|
@ -195,7 +142,7 @@ if (defined('APP_VERSION'))
|
||||||
$sFile = $sNewFile = $sNewFileName = '';
|
$sFile = $sNewFile = $sNewFileName = '';
|
||||||
$aFiles = glob(APP_VERSION_ROOT_PATH.'app/domains/*');
|
$aFiles = glob(APP_VERSION_ROOT_PATH.'app/domains/*');
|
||||||
|
|
||||||
if (is_array($aFiles) && 0 < \count($aFiles))
|
if (is_array($aFiles) && 0 < count($aFiles))
|
||||||
{
|
{
|
||||||
foreach ($aFiles as $sFile)
|
foreach ($aFiles as $sFile)
|
||||||
{
|
{
|
||||||
|
|
@ -237,7 +184,6 @@ if (defined('APP_VERSION'))
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($sSalt, $sData, $sInstalled, $sPrivateDataFolderInternalName);
|
unset($sSalt, $sData, $sInstalled, $sPrivateDataFolderInternalName);
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($_SERVER['HTTP_USER_AGENT'])) {
|
if (!isset($_SERVER['HTTP_USER_AGENT'])) {
|
||||||
$_SERVER['HTTP_USER_AGENT'] = '';
|
$_SERVER['HTTP_USER_AGENT'] = '';
|
||||||
|
|
@ -269,10 +215,31 @@ if (defined('APP_VERSION'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
include APP_VERSION_ROOT_PATH.'app/handle.php';
|
if (!defined('RAINLOOP_APP_LIBRARIES_PATH')) {
|
||||||
|
define('RAINLOOP_APP_LIBRARIES_PATH', rtrim(realpath(__DIR__), '\\/').'/app/libraries/');
|
||||||
|
|
||||||
if (defined('SNAPPYMAIL_EXIT_ON_END') && SNAPPYMAIL_EXIT_ON_END)
|
if (false === set_include_path(RAINLOOP_APP_LIBRARIES_PATH . PATH_SEPARATOR . get_include_path())) {
|
||||||
{
|
exit('set_include_path() failed. Probably due to Apache config using php_admin_value instead of php_value');
|
||||||
|
}
|
||||||
|
|
||||||
|
spl_autoload_extensions('.php');
|
||||||
|
/** lowercase autoloader */
|
||||||
|
spl_autoload_register();
|
||||||
|
/** case-sensitive autoloader */
|
||||||
|
spl_autoload_register(function($sClassName){
|
||||||
|
$file = RAINLOOP_APP_LIBRARIES_PATH . strtr($sClassName, '\\', DIRECTORY_SEPARATOR) . '.php';
|
||||||
|
// if ($file = stream_resolve_include_path(strtr($sClassName, '\\', DIRECTORY_SEPARATOR) . '.php')) {
|
||||||
|
if (is_file($file)) {
|
||||||
|
include_once $file;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (class_exists('RainLoop\\Api')) {
|
||||||
|
RainLoop\Api::Handle();
|
||||||
|
// NextCloud/OwnCloud?
|
||||||
|
if (empty($_ENV['RAINLOOP_INCLUDE_AS_API'])) {
|
||||||
|
RainLoop\Service::Handle();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue