src/EventListener/Apollon/ControllerListener.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\Apollon;
  3. use App\Controller\Apollon\DefaultPublicController;
  4. use App\Service\Apollon\WebsiteService;
  5. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  9. use Symfony\Component\HttpKernel\Event\RequestEvent;
  10. use Symfony\Component\Security\Core\Security;
  11. class ControllerListener
  12. {
  13.     const PDN_PARAMETER 'pro.domain_name';
  14.     private DefaultPublicController $controller;
  15.     private ContainerBagInterface $params;
  16.     private WebsiteService $websiteService;
  17.     private Security $security;
  18.     public function __construct(
  19.         DefaultPublicController $controller,
  20.         ContainerBagInterface   $params,
  21.         WebsiteService          $websiteService,
  22.         Security                $security
  23.     )
  24.     {
  25.         $this->controller $controller;
  26.         $this->params $params;
  27.         $this->websiteService $websiteService;
  28.         $this->security $security;
  29.     }
  30.     public function onKernelRequest(RequestEvent $event)
  31.     {
  32.         if (is_null($this->security->getUser()) && 'fetch' === $event->getRequest()->headers->get('A-Sending-Method')) {
  33.             $event->setResponse(new JsonResponse(['a-reload' => true]));
  34.             return;
  35.         }
  36.         if (
  37.             $this->params->has(self::PDN_PARAMETER) &&
  38.             $event->getRequest()->getHost() !== $this->params->get(self::PDN_PARAMETER) &&
  39.             !$this->websiteService->getWebsiteFromDomainName($event->getRequest()->getHost()) &&
  40.             $this->websiteService->getWebsiteFromDomainName('www.' $event->getRequest()->getHost())
  41.         ) {
  42.             $event->setResponse(new RedirectResponse('https://www.' $event->getRequest()->getHost()));
  43.         }
  44.     }
  45.     public function onKernelController(ControllerEvent $event)
  46.     {
  47.         if (
  48.             $this->params->has(self::PDN_PARAMETER) &&
  49.             $event->getRequest()->getHost() !== $this->params->get(self::PDN_PARAMETER) &&
  50.             $this->websiteService->getWebsiteFromDomainName($event->getRequest()->getHost()) &&
  51.             !str_starts_with($event->getRequest()->getRequestUri(), '/_')
  52.         ) {
  53.             $event->setController([$this->controller'index']);
  54.         }
  55.     }
  56. }