<?php
namespace AppBundle\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\KernelEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Lexik\Bundle\JWTAuthenticationBundle\Encoder\JWTEncoderInterface;
use Symfony\Component\HttpFoundation\{Response};
/**
* Description of ResponseSubscriber
*
* look at https://symfony.com/doc/current/event_dispatcher.html#creating-an-event-subscriber
*
* @author SAWIT Mateusz Miklewski <biuro@sawit.pl>
*/
class RequestSubscriber implements EventSubscriberInterface {
private $entityManager;
private $tokenStorage;
private $jwt_encoder;
public function __construct(EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage, JWTEncoderInterface $jwt_encoder)
{
$this->entityManager = $entityManager;
$this->tokenStorage = $tokenStorage;
$this->jwt_encoder = $jwt_encoder;
}
public static function getSubscribedEvents(): array {
// return the subscribed events, their methods and priorities
return array(
KernelEvents::REQUEST => array(
array('handleOptionsMethod', 512)
)
);
}
public function handleOptionsMethod(KernelEvent $event) {
$request = $event->getRequest();
$method = $request->getMethod();
if ('OPTIONS' === $method) {
$response = new Response();
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->headers->set('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE');
$response->headers->set('Access-Control-Allow-Headers', 'Accept, Authorization, Content-Type, Token');
$response->headers->set('Access-Control-Expose-Headers', 'Token');
$event->setResponse($response, Response::HTTP_OK);
$event->stopPropagation();
return $response;
}
return null;
}
}