src/EventSubscriber/AuthenticationSubscriber.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Annotation\UnprotectedRoute;
  4. use App\Service\JwtService;
  5. use Doctrine\Common\Annotations\Reader;
  6. use Psr\Log\LoggerInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. class AuthenticationSubscriber implements EventSubscriberInterface
  11. {
  12.     private $annotationReader;
  13.     private $jwtService;
  14.     private $logger;
  15.     public function __construct(
  16.         LoggerInterface $logger,
  17.         Reader $annotationReader,
  18.         JwtService $jwtService
  19.     ) {
  20.         $this->logger $logger;
  21.         $this->annotationReader $annotationReader;
  22.         $this->jwtService $jwtService;
  23.     }
  24.     /**
  25.      * @param ResponseEvent $event
  26.      *
  27.      * Method intercepts all responses before they are returned to user
  28.      */
  29.     public function onKernelResponse(ResponseEvent $event)
  30.     {
  31.         $auth = isset($_COOKIE['jwt']) ? $_COOKIE['jwt'] : null;
  32.         $credentials $auth str_replace('Bearer '''$auth) : null;
  33.         try {
  34.             $jwt $this->jwtService->getDecodedToken($credentials);
  35.         } catch (\Exception $e) {
  36.             return null;
  37.         }
  38.         if ($jwt && $jwt['exp'] <= $this->jwtService->timeForRefresh) {
  39.             $refreshedJwt $this->jwtService->setRefreshedJwt($jwt);
  40.             setcookie('jwt'$refreshedJwttime() + $_ENV['JWT_TIMEOUT'], '/'''falsetrue);
  41.             setcookie('role'implode(","$jwt['roles']), time() + $_ENV['JWT_TIMEOUT'], '/'''falsefalse);
  42. //            if(in_array('ROLE_ADMIN',$jwt['roles']) || in_array('ROLE_SUPER_ADMIN',$jwt['roles'])){
  43. //                setcookie('isAdmin',true,time()+60*60,'/','',false,false);
  44. //                if(in_array('ROLE_SUPER_ADMIN',$jwt['roles'])){
  45. //                    setcookie('isSuperAdmin',true,time()+60*60,'/','',false,false);
  46. //                }
  47. //            }
  48. //            else{
  49.             if (in_array('ROLE_STUDENT'$jwt['roles'])) {
  50.                 setcookie('isLoggedIn'truetime() + 60 60'/'''falsefalse);
  51.             }
  52.             //}
  53.         }
  54.     }
  55.     public static function getSubscribedEvents()
  56.     {
  57.         return [
  58.             KernelEvents::RESPONSE => 'onKernelResponse',
  59.         ];
  60.     }
  61. }