src/EventListener/RequestListener.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  4. use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
  5. use Symfony\Component\security\Core\Exception\AuthenticationException;
  6. use Symfony\Component\security\Core\Exception\AccessDeniedException;
  7. use Symfony\Component\Security\Core\Exception\SessionUnavailableException;
  8. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  9. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\Routing\RouterInterface;
  12. class RequestListener
  13. {
  14.     protected $container;
  15.     protected $tokenStorage;
  16.     //pass in container to get parameter set in parameter.yml file.
  17.     //public function __construct($container, TokenStorageInterface $tokenStorage)
  18.     public function __construct($containerTokenStorageInterface $tokenStorage)
  19.     {
  20.         $this->container $container;
  21.         $this->tokenStorage $tokenStorage;
  22.     }
  23.     public function onKernelRequest(GetResponseEvent $event)
  24.     {
  25.         if ($this->tokenStorage->getToken() != null && $this->tokenStorage->getToken()->getUsername() != 'anon.') {
  26.             $request $event->getRequest();
  27.             if ($request->hasSession()) {
  28.                 $session $request->getSession();
  29.                 if (isset($_COOKIE["PHPSESSID"])) {
  30.                     $session_created $session->getMetadataBag()->getCreated();
  31.                     $session_lifetime $session->getMetadataBag()->getLifetime();
  32.                     $session_expire_time $session_created $session_lifetime;
  33.                     $time_to_expire $session_expire_time time();
  34.                     $session_last_used $session->getMetadataBag()->getLastUsed();
  35.                     //only ask user to extend the session when we have less than 15 minutes left
  36.                     $minutes_before_prompt $this->container->getParameter("session_timeout_timer_minutes");
  37.                     if ($session_last_used $session_expire_time && $time_to_expire && $time_to_expire $minutes_before_prompt 60) {
  38.                         $request->getSession()->getFlashBag()->add('timeout-modal'$time_to_expire);
  39.                     }
  40.                     $showDisclaimer $this->container->getParameter("enable_disclaimer");
  41.                     if (isset($showDisclaimer) && $showDisclaimer == 'yes' && ($request->getRequestUri() != '/policies' && $request->getRequestUri() != '/policies-submit')) {
  42.                         $user_accepted $session->get('user_accepted_terms');
  43.                         if ($user_accepted == '' || $user_accepted == 'no') {
  44.                             $event->setResponse(new RedirectResponse('/policies'));
  45.                         }
  46.                     }
  47.                     
  48.                     //check if the user has entered a token and matched the 2FA.  Otherwise always redirect them to the token page
  49.                     $participant_token_matched $session->get('participant_token_matched');
  50.                     //only check this for exchange subdomain
  51.                     $host $request->getHost();
  52.                     if ($host == $this->container->getParameter('exchange_subdomain')) {
  53.                         if(strpos($request->getRequestUri(), "cookie-js-error") === false ){
  54.                             if (($participant_token_matched == '' || $participant_token_matched != 'yes')){
  55.                                 if( strpos($request->getRequestUri(), "token-2fa/") === false && strpos($request->getRequestUri(), "helpdesk") === false && strpos($request->getRequestUri(), "maintenance-mode") === false){
  56.                                     //$token_route = $this->router->generate('display-token-form');
  57.                                     $event->setResponse(new RedirectResponse('token-2fa/display-token-form'));
  58.                                 }
  59.                             }else{
  60.                                 if(strpos($request->getRequestUri(), "login") !== false){
  61.                                     $event->setResponse(new RedirectResponse('/dashboard'));
  62.                                 }
  63.                             }
  64.                         }
  65.                     }
  66.                 }
  67.             }
  68.         }
  69.     }
  70. }