<?php
namespace App\EventSubscriber;
use App\Annotation\UnprotectedRoute;
use App\Service\JwtService;
use Doctrine\Common\Annotations\Reader;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class AuthenticationSubscriber implements EventSubscriberInterface
{
private $annotationReader;
private $jwtService;
private $logger;
public function __construct(
LoggerInterface $logger,
Reader $annotationReader,
JwtService $jwtService
) {
$this->logger = $logger;
$this->annotationReader = $annotationReader;
$this->jwtService = $jwtService;
}
/**
* @param ResponseEvent $event
*
* Method intercepts all responses before they are returned to user
*/
public function onKernelResponse(ResponseEvent $event)
{
$auth = isset($_COOKIE['jwt']) ? $_COOKIE['jwt'] : null;
$credentials = $auth ? str_replace('Bearer ', '', $auth) : null;
try {
$jwt = $this->jwtService->getDecodedToken($credentials);
} catch (\Exception $e) {
return null;
}
if ($jwt && $jwt['exp'] <= $this->jwtService->timeForRefresh) {
$refreshedJwt = $this->jwtService->setRefreshedJwt($jwt);
setcookie('jwt', $refreshedJwt, time() + $_ENV['JWT_TIMEOUT'], '/', '', false, true);
setcookie('role', implode(",", $jwt['roles']), time() + $_ENV['JWT_TIMEOUT'], '/', '', false, false);
// if(in_array('ROLE_ADMIN',$jwt['roles']) || in_array('ROLE_SUPER_ADMIN',$jwt['roles'])){
// setcookie('isAdmin',true,time()+60*60,'/','',false,false);
// if(in_array('ROLE_SUPER_ADMIN',$jwt['roles'])){
// setcookie('isSuperAdmin',true,time()+60*60,'/','',false,false);
// }
// }
// else{
if (in_array('ROLE_STUDENT', $jwt['roles'])) {
setcookie('isLoggedIn', true, time() + 60 * 60, '/', '', false, false);
}
//}
}
}
public static function getSubscribedEvents()
{
return [
KernelEvents::RESPONSE => 'onKernelResponse',
];
}
}