src/EventListener/KernelRequestListener.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\Niveau;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Psr\Log\LoggerInterface;
  6. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  7. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  8. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  9. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  10. use Symfony\Component\HttpKernel\Event\RequestEvent;
  11. use Symfony\Component\Routing\RouterInterface;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  14. class KernelRequestListener
  15. {
  16.     protected $token;
  17.     protected $router;
  18.     protected $em;
  19.     protected $session;
  20.     protected $logger;
  21.     private ParameterBagInterface $parameterBag;
  22.     public function __construct(
  23.         RouterInterface        $router,
  24.         TokenStorageInterface  $token_storage,
  25.         EntityManagerInterface $em,
  26.         SessionInterface       $session,
  27.         LoggerInterface        $samlLogger,
  28.         ParameterBagInterface  $parameterBag
  29.     )
  30.     {
  31.         $this->token $token_storage;
  32.         $this->router $router;
  33.         $this->em $em;
  34.         $this->session $session;
  35.         $this->logger $samlLogger;
  36.         $this->parameterBag $parameterBag;
  37.     }
  38.     public function onKernelRequest(RequestEvent $event)
  39.     {
  40.         $request $event->getRequest();
  41.         if ($event->isMainRequest()) {
  42.             $host $request->getHost();
  43.             $patternroute "/(saml_)(.*)/";
  44.             /* Si le user est loggué */
  45.             if ($this->token->getToken() && $this->token->getToken()->getUser() != 'anon.') {
  46.                 /* Si l'url est celle de l'APP mais qu'on est loggué et qu'on demande une route saml */
  47.                 /* On redirige vers la home */
  48.                 if ($host == $this->parameterBag->get('SAML_APP_HOST') && preg_match($patternroute$request->attributes->get('_route'))) {
  49.                     $this->logger->info('SAML OK');
  50.                     $event->setResponse(new RedirectResponse('https://' $this->parameterBag->get('SAML_APP_HOST')));
  51.                 }
  52.                 /* On force le chargement de la page change_password tant que le compte est en mode mdp temporaire */
  53.                 if ($this->token->getToken()->getUser()->getIsTemporaryPassword() && $request->attributes->get('_route') != 'change_password') {
  54.                     $event->setResponse(new RedirectResponse($this->router->generate('change_password')));
  55.                 }
  56.             } else {
  57.                 /* S'il n'est pas loggué */
  58.                 /* que l'url est celle de AUTH */
  59.                 if ($host == $this->parameterBag->get('SAML_AUTH_HOST')) {
  60.                     if (!preg_match($patternroute$request->attributes->get('_route'))) {
  61.                         /* mais que la route demandée n'est pas lié à saml on redirige vers l'URL de l'appli */
  62.                         $event->setResponse(new RedirectResponse('https' '://' $this->parameterBag->get('SAML_APP_HOST')));
  63.                     }
  64.                 }
  65.             }
  66.         }
  67.         return;
  68.     }
  69. }