<?php
namespace Pmag\ApiBundle\EventListener;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationFailureEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Response\JWTAuthenticationFailureResponse;
use Pmag\ApiBundle\Entity\Client;
use Pmag\ApiBundle\Manager\ClientManager;
/**
* AuthentificationFailureListener
* @package Pmag\ApiBundle\EventListener
* @author Daly Ala <rafin_ala03@hotmail.fr>
**/
class AuthenticationFailureListener
{
private $cm;
public function __construct(ClientManager $cm)
{
$this->cm = $cm;
}
/**
* @param AuthenticationFailureEvent $event
*/
public function onAuthenticationFailureResponse(AuthenticationFailureEvent $event)
{
$user = $this->cm->getClientByPin($event->getException()->getToken()->getUser());
if ($user instanceof Client ) {
if($user->isActive() == true){
$this->cm->IncreaseNumberOfLoginFailure($user);
if ($user->getNbloginFailure() == 3) {
$this->cm->blockAccountOnAuthenticationFailure($user);
$data = [
'status' => '401 Unauthorized',
'message' => 'you have failed to connect several times , your account will be blocked ',
];
$response = new JWTAuthenticationFailureResponse($data);
$event->setResponse($response);
}
}elseif( $user->isActive() == false)
{
$data = [
'status' => '401 Unauthorized',
'message' => 'Bad credentials, Account blocked',
];
$response = new JWTAuthenticationFailureResponse($data);
$event->setResponse($response);
}
return;
}
return;
}
}