1
0
mirror of https://github.com/e107inc/e107.git synced 2025-07-30 11:20:25 +02:00

Issue #5458 Also adds support for site_hosts configuration option.

Minimum PHP version set to 8 during installation.
This commit is contained in:
camer0n
2025-03-31 07:11:03 -07:00
parent 639a367ed6
commit cfebf11d02
4 changed files with 295 additions and 209 deletions

View File

@@ -73,6 +73,13 @@ class e107
*/
protected $HTTP_SCHEME;
/**
* Storage for host configuration from siteurl or e107_config $config['other']['site_hosts']
*
* @var array
*/
protected $hosts = [];
/**
* Used for runtime caching of user extended struct
*
@@ -622,6 +629,11 @@ class e107
$this->site_path = $this->makeSiteHash($e107_config_mysql_info['defaultdb'], $e107_config_mysql_info['prefix']);
}
if(!empty($e107_config_override['site_hosts']))
{
$this->hosts = (array) $e107_config_override['site_hosts'];
}
// Set default folder (and override paths) if missing from e107_config.php
$this->setDirs($e107_paths, $e107_config_override);
@@ -5534,18 +5546,19 @@ class e107
*/
public function set_urls_deferred()
{
$siteurl = self::getPref('siteurl');
$configured_host = parse_url($siteurl, PHP_URL_HOST);
$siteurl = self::getPref('siteurl');
$defaultHost = (array) parse_url($siteurl, PHP_URL_HOST);
$hosts = !empty($this->hosts) ? $this->hosts : $defaultHost;
if(self::isCli())
{
define('SITEURL', $siteurl);
define('SITEURLBASE', rtrim(SITEURL,'/'));
}
elseif(!empty($configured_host) && strpos($siteurl,'http')!== false && $configured_host !== $_SERVER['HTTP_HOST'] && substr($_SERVER['HTTP_HOST'], - strlen('.' . $configured_host)) !== ('.' . $configured_host))
elseif(!empty($hosts) && !$this->isAllowedHost($hosts, $_SERVER['HTTP_HOST']))
{
error_log('The configured siteurl in your preferences or e107_config "host" value does not match the HTTP_HOST: '.$_SERVER['HTTP_HOST']);
die('Site Configuration Issue Detected. Please contact your webmaster.');
error_log('The configured siteurl in your preferences does not match the HTTP_HOST: '.$_SERVER['HTTP_HOST']);
}
else
{
@@ -5553,7 +5566,6 @@ class e107
define('SITEURL', SITEURLBASE.e_HTTP);
}
// login/signup
define('e_SIGNUP', SITEURL.(file_exists(e_BASE.'customsignup.php') ? 'customsignup.php' : 'signup.php'));
@@ -5565,6 +5577,34 @@ class e107
return $this;
}
/**
* Check if the current host ($_SERVER['HTTP_HOST']) matches any configured host(s).
*
* @param array $allowedHosts Array of configured hostnames.
* @param string $httpHost HTTP_HOST being validated.
*
* @return bool True if host is allowed, false otherwise.
*/
private function isAllowedHost(array $allowedHosts, string $httpHost): bool
{
if (empty($allowedHosts))
{
error_log('The configured siteurl in your preferences does not contain a a domain name');
return true; // Allowed if no hosts.
}
foreach ($allowedHosts as $host)
{
if ($httpHost === $host || str_ends_with($httpHost, '.' . $host))
{
return true;
}
}
return false;
}
/**
* Defines e_QUERY in a format that can be used in HTML and defines e_MENU
* @param boolean $no_cbrace remove curly brackets from the url

View File

@@ -62,4 +62,4 @@ return [
'other' => [
'site_path' => '000000test'
]
];
];

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,7 @@
*/
// minimal software version
define('MIN_PHP_VERSION', '7.4');
define('MIN_PHP_VERSION', '8.0');
define('MIN_MYSQL_VERSION', '4.1.2');
define('MAKE_INSTALL_LOG', true);
@@ -1577,8 +1577,9 @@ return [
'media' => '{$this->e107->e107_dirs['MEDIA_DIRECTORY']}',
'system' => '{$this->e107->e107_dirs['SYSTEM_DIRECTORY']}',
],
'site' => [
'other' => [
'site_path' => '{$this->previous_steps['paths']['hash']}',
// 'site_hosts' => ['localhost','parked-domain.com'],
]
];
";