src/EventSubscriber/MaintenanceSubscriber.php line 23
<?php
namespace Cms\EventSubscriber;
use Cms\String\MaintenanceTokenChecker;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Twig\Environment;
class MaintenanceSubscriber implements EventSubscriberInterface
{
public function __construct(
private readonly Environment $twig,
private readonly RequestStack $requestStack,
#[Autowire('%cms.is_maintenance%')] private readonly bool $isMaintenance,
#[Autowire('%cms.is_maintenance.token%')] private readonly string $maintenanceToken,
) {}
public function onKernelRequest(RequestEvent $event): void
{
$request = $event->getRequest();
$token = $request->query->get('token', null);
if (
$this->isMaintenance
&& (!$token || $this->maintenanceToken !== $token)
&& !\str_starts_with($request->attributes->get('_route'), '_')
) {
$response = new Response();
if ($this->requestStack->getMainRequest() === $request) {
$response->setContent($this->twig->render('maintenance.html.twig'));
}
$event->setResponse($response);
}
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 0],
];
}
}