mirror of
https://github.com/flarum/core.git
synced 2025-10-18 02:06:08 +02:00
59 lines
1.6 KiB
PHP
59 lines
1.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Flarum.
|
|
*
|
|
* (c) Toby Zerner <toby.zerner@gmail.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Flarum\Foundation;
|
|
|
|
use Psr\Http\Message\ResponseInterface;
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
use Psr\Http\Server\RequestHandlerInterface;
|
|
use Tobscure\JsonApi\Document;
|
|
use Zend\Diactoros\Response\HtmlResponse;
|
|
use Zend\Diactoros\Response\JsonResponse;
|
|
|
|
class MaintenanceModeHandler implements RequestHandlerInterface
|
|
{
|
|
const MESSAGE = 'Currently down for maintenance. Please come back later.';
|
|
|
|
/**
|
|
* Handle the request and return a response.
|
|
*/
|
|
public function handle(ServerRequestInterface $request): ResponseInterface
|
|
{
|
|
// Special handling for API requests: they get a proper API response
|
|
if ($this->isApiRequest($request)) {
|
|
return $this->apiResponse();
|
|
}
|
|
|
|
// By default, return a simple text message.
|
|
return new HtmlResponse(self::MESSAGE, 503);
|
|
}
|
|
|
|
private function isApiRequest(ServerRequestInterface $request): bool
|
|
{
|
|
return str_contains(
|
|
$request->getHeaderLine('Accept'),
|
|
'application/vnd.api+json'
|
|
);
|
|
}
|
|
|
|
private function apiResponse(): ResponseInterface
|
|
{
|
|
return new JsonResponse(
|
|
(new Document)->setErrors([
|
|
'status' => '503',
|
|
'title' => self::MESSAGE
|
|
]),
|
|
503,
|
|
['Content-Type' => 'application/vnd.api+json']
|
|
);
|
|
}
|
|
}
|