diff --git a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php index d8cdd7b1..68f0464c 100644 --- a/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php +++ b/src/packages/plg_system_mokowaas/Extension/MokoWaaS.php @@ -129,9 +129,6 @@ class MokoWaaS extends CMSPlugin // Security: HTTPS redirect (runs for all clients) $this->enforceHttps(); - // Site alias handling: offline page and backend redirect - $this->handleSiteAlias(); - // MokoWaaS API endpoints (run before routing) $mokoAction = $this->app->input->get('mokowaas', ''); @@ -896,6 +893,9 @@ class MokoWaaS extends CMSPlugin */ public function onAfterRoute() { + // Site alias handling: offline page and backend redirect + $this->handleSiteAlias(); + if (!$this->app->isClient('administrator')) { return; @@ -2779,7 +2779,12 @@ class MokoWaaS extends CMSPlugin { if (is_string($aliases)) { - $aliases = json_decode($aliases, false); + $aliases = json_decode($aliases); + } + + if (is_object($aliases)) + { + $aliases = (array) $aliases; } if (is_array($aliases)) @@ -2790,7 +2795,7 @@ class MokoWaaS extends CMSPlugin { $a = (object) $a; - if (isset($a->domain) && strcasecmp(trim($a->domain), $currentHost) === 0) + if (isset($a->domain) && strcasecmp(rtrim(trim($a->domain), '/'), $currentHost) === 0) { $isAlias = true; break; @@ -2812,9 +2817,8 @@ class MokoWaaS extends CMSPlugin protected function getCurrentAlias() { $currentHost = $_SERVER['HTTP_HOST'] ?? ''; - $primaryHost = $this->getPrimaryHost(); - if (empty($currentHost) || strcasecmp($currentHost, $primaryHost) === 0) + if (empty($currentHost)) { return null; } @@ -2826,22 +2830,29 @@ class MokoWaaS extends CMSPlugin return null; } - // Subform returns JSON string or array + // Subform returns JSON string, array, or stdClass if (is_string($aliases)) { - $aliases = json_decode($aliases, false); + $aliases = json_decode($aliases); } - if (!is_array($aliases)) + // Convert object to array (Joomla subform stores as {"key0":{...},"key1":{...}}) + if (is_object($aliases)) + { + $aliases = (array) $aliases; + } + + if (!is_array($aliases) || empty($aliases)) { return null; } + // Look up the current host in the aliases list — if found, it's an alias foreach ($aliases as $alias) { $alias = (object) $alias; - if (isset($alias->domain) && strcasecmp(trim($alias->domain), $currentHost) === 0) + if (isset($alias->domain) && strcasecmp(rtrim(trim($alias->domain), '/'), $currentHost) === 0) { return $alias; } @@ -2881,7 +2892,7 @@ class MokoWaaS extends CMSPlugin } // Offline: show maintenance page for frontend requests - if (!empty($alias->offline) && $alias->offline === '1' + if (!empty($alias->offline) && (string) $alias->offline === '1' && $this->app->isClient('site')) { // Allow health API to still respond @@ -2893,7 +2904,7 @@ class MokoWaaS extends CMSPlugin $message = $alias->offline_message ?? 'This site is currently offline for maintenance.'; $brandName = $this->params->get('brand_name', 'MokoWaaS'); - header('HTTP/1.1 503 Service Unavailable'); + http_response_code(503); header('Retry-After: 3600'); header('Content-Type: text/html; charset=utf-8'); echo '
'; @@ -2905,7 +2916,7 @@ class MokoWaaS extends CMSPlugin echo '' . htmlspecialchars($message) . '
'; echo ''; - $this->app->close(); + die(); } }