src/EventSubscriber/AuthenticationSubscriber.php line 40

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', $refreshedJwt, time() + $_ENV['JWT_TIMEOUT'], '/', '', false, true);
  41. setcookie('role', implode(",", $jwt['roles']), time() + $_ENV['JWT_TIMEOUT'], '/', '', false, false);
  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', true, time() + 60 * 60, '/', '', false, false);
  51. }
  52. //}
  53. }
  54. }
  55. public static function getSubscribedEvents()
  56. {
  57. return [
  58. KernelEvents::RESPONSE => 'onKernelResponse',
  59. ];
  60. }
  61. }