src/EventSubscriber/BetaAccessSubscriber.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpFoundation\RedirectResponse;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\Routing\RouterInterface;
  8. use Symfony\Component\Security\Core\Security;
  9. class BetaAccessSubscriber implements EventSubscriberInterface
  10. {
  11.     private const BETA_HOST 'betatest.lelorrain.fr';
  12.     private const ALLOWED_ROUTES = [
  13.         'beta_request',
  14.         'beta_confirm',
  15.         'subscribe',
  16.         'confirm_email',
  17.         '_wdt',
  18.         '_profiler',
  19.     ];
  20.     public function __construct(
  21.         private Security $security,
  22.         private RouterInterface $router
  23.     ) {}
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             KernelEvents::REQUEST => ['onKernelRequest'10],
  28.         ];
  29.     }
  30.     public function onKernelRequest(RequestEvent $event): void
  31.     {
  32.         if (!$event->isMainRequest()) {
  33.             return;
  34.         }
  35.         $request $event->getRequest();
  36.         if ($request->getHost() !== self::BETA_HOST) {
  37.             return;
  38.         }
  39.         $route $request->attributes->get('_route');
  40.         if (in_array($routeself::ALLOWED_ROUTEStrue)) {
  41.             return;
  42.         }
  43.         if ($this->security->getUser() !== null) {
  44.             return;
  45.         }
  46.         if ($request->cookies->get('email_subscribed') === 'true') {
  47.             return;
  48.         }
  49.         $event->setResponse(
  50.             new RedirectResponse($this->router->generate('beta_request'))
  51.         );
  52.     }
  53. }