<?php
namespace App\EventSubscriber;
use App\Entity\Session;
use App\Repository\SessionRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\Security;
class OneTimeConnexionSubscriber implements EventSubscriberInterface
{
private $entityManager;
private $sessionRepository;
private $security;
public function __construct(ManagerRegistry $doctrine, SessionRepository $sessionRepository, Security $security)
{
$this->entityManager = $doctrine->getManager();
$this->sessionRepository = $sessionRepository;
$this->security = $security;
}
public static function getSubscribedEvents()
{
// return the subscribed events, their methods and priorities
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
public function onKernelRequest(RequestEvent $event)
{
$token = $event->getRequest()->headers->get('authorization');
if ($token) {
$tokenFinal = explode('.', $token);
$session = $this->sessionRepository->findOneBy(["token" => $tokenFinal[2]]);
if (!$session) {
$response = new JsonResponse([
'code' => 401,
'message' => "Votre session est expiré"
], 401);
$event->setResponse($response);
}
}
}
}