<?php
namespace App\EventListener;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationFailureEvent;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Entity\Usuari;
class JWTAuthenticationSuccessListener
{
public $requestStack;
public function __construct($requestStack)
{
$this->requestStack = $requestStack;
}
/**
* @param AuthenticationSuccessEvent $event
*/
public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event)
{
$data = $event->getData();
$user = $event->getUser();
if (!$user instanceof Usuari) {
return;
}
/**
* Si intenta accedir a API ENMOTIC comprova que l'usuari estigui actiu.
*/
$request = $this->requestStack->getCurrentRequest();
preg_match('/^api_enmotic/', $request->get('_route'), $matches);
if(!empty($matches) && !$user->getActiu()){
$event->getResponse()->setStatusCode(401);
$event->setData([
'code' => 401,
'message' =>'Inactive user',
]);
}
}
public function onAuthenticationFailureResponse(AuthenticationFailureEvent $event)
{
$request = $this->requestStack->getCurrentRequest();
$data = [
'code' => 401,
'message' => 'Bad credentials',
];
$response = new JsonResponse($data, 401);
$event->setResponse($response);
}
}