<?php
namespace App\EventListener;
use App\Entity\App\Miscellaneous;
use App\Enums\Constants;
use App\Repository\App\MiscellaneousRepository;
use App\Service\AuthenticationService;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException;
class SiteMaintenanceModeListener
{
/**
* @var MiscellaneousRepository
*/
private $miscellaneousRepository;
/**
* @var AuthenticationService
*/
private $authenticationService;
public function __construct(MiscellaneousRepository $miscellaneousRepository, AuthenticationService $authenticationService)
{
$this->miscellaneousRepository = $miscellaneousRepository;
$this->authenticationService = $authenticationService;
}
/**
* @param ControllerEvent $event
*/
public function onKernelController(ControllerEvent $event): void
{
if (! $event->isMasterRequest()) {
return;
}
/** @var Miscellaneous $disableAllUsers */
$disableAllUsers = $this->miscellaneousRepository->findOneByName(Constants::DISABLE_ALL_USERS_FIELD);
/**
* If current user is not service admin and site is in disabled mode, deny access
*/
if ($disableAllUsers->getValue() && ! $this->authenticationService->userIsMmpzServiceAdmin()) {
throw new ServiceUnavailableHttpException();
}
}
}