diff --git a/mod/maintenance.php b/mod/maintenance.php deleted file mode 100644 index 8e0197b86..000000000 --- a/mod/maintenance.php +++ /dev/null @@ -1,29 +0,0 @@ - L10n::t('System down for maintenance'), - '$reason' => $reason - ]); -} diff --git a/src/App.php b/src/App.php index 017661c4c..0f0c0537e 100644 --- a/src/App.php +++ b/src/App.php @@ -988,7 +988,7 @@ class App header('Refresh: 120; url=' . $this->getBaseURL() . "/" . $this->query_string); Module\Special\HTTPException::rawContent( - new HTTPException\ServiceUnavaiableException('The node is currently overloaded. Please try again later.') + new HTTPException\ServiceUnavailableException('The node is currently overloaded. Please try again later.') ); } @@ -1077,10 +1077,10 @@ class App // in install mode, any url loads install module // but we need "view" module for stylesheet - if ($this->getMode()->isInstall() && $this->module != 'view') { - $this->module = 'install'; - } elseif (!$this->getMode()->has(App\Mode::MAINTENANCEDISABLED) && $this->module != 'view') { - $this->module = 'maintenance'; + if ($this->getMode()->isInstall() && $this->module !== 'install') { + $this->internalRedirect('install'); + } elseif (!$this->getMode()->has(App\Mode::MAINTENANCEDISABLED) && $this->module !== 'maintenance') { + $this->internalRedirect('maintenance'); } else { $this->checkURL(); Core\Update::check($this->getBasePath(), false, $this->getMode()); diff --git a/src/App/Router.php b/src/App/Router.php index 9c8927cf1..086d9d280 100644 --- a/src/App/Router.php +++ b/src/App/Router.php @@ -139,6 +139,7 @@ class Router $this->routeCollector->addRoute(['GET', 'POST'], '/login', Module\Login::class); $this->routeCollector->addRoute(['GET', 'POST'], '/logout', Module\Logout::class); $this->routeCollector->addRoute(['GET'], '/magic', Module\Magic::class); + $this->routeCollector->addRoute(['GET'], '/maintenance', Module\Maintenance::class); $this->routeCollector->addRoute(['GET'], '/manifest', Module\Manifest::class); $this->routeCollector->addRoute(['GET'], '/modexp/{nick}', Module\PublicRSAKey::class); $this->routeCollector->addRoute(['GET'], '/nodeinfo/1.0', Module\NodeInfo::class); diff --git a/src/Core/System.php b/src/Core/System.php index 31934af5a..42587577d 100644 --- a/src/Core/System.php +++ b/src/Core/System.php @@ -242,6 +242,9 @@ class System extends BaseObject case 301: header('HTTP/1.1 301 Moved Permanently'); break; + case 307: + header('HTTP/1.1 307 Temporary Redirect'); + break; } header("Location: $url"); diff --git a/src/Module/Maintenance.php b/src/Module/Maintenance.php new file mode 100644 index 000000000..24140bb35 --- /dev/null +++ b/src/Module/Maintenance.php @@ -0,0 +1,32 @@ +getConfig(); + + $reason = $config->get('system', 'maintenance_reason'); + + if ((substr(Strings::normaliseLink($reason), 0, 7) === 'http://') || + (substr(Strings::normaliseLink($reason), 0, 8) === 'https://')) { + System::externalRedirect($reason, 307); + } + + $exception = new HTTPException\ServiceUnavailableException($reason); + $exception->httpdesc = L10n::t('System down for maintenance'); + throw $exception; + } +} diff --git a/src/Network/HTTPException/ServiceUnavaiableException.php b/src/Network/HTTPException/ServiceUnavailableException.php similarity index 67% rename from src/Network/HTTPException/ServiceUnavaiableException.php rename to src/Network/HTTPException/ServiceUnavailableException.php index 6c0e6595d..257b8c858 100644 --- a/src/Network/HTTPException/ServiceUnavaiableException.php +++ b/src/Network/HTTPException/ServiceUnavailableException.php @@ -4,7 +4,7 @@ namespace Friendica\Network\HTTPException; use Friendica\Network\HTTPException; -class ServiceUnavaiableException extends HTTPException +class ServiceUnavailableException extends HTTPException { protected $code = 503; }