<?php
namespace Pmag\ApiBundle\EventListener;
use Doctrine\ORM\EntityManagerInterface;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
use Pmag\ApiBundle\ApiEvents\ClientEvents;
use Pmag\ApiBundle\Entity\Client;
use Pmag\ApiBundle\Event\ClientEvent;
use Pmag\ApiBundle\Manager\ClientManager;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* AuthenticationSuccessListener
* @package Pmag\ApiBundle\EventListener
* @author Daly Ala <rafin_ala03@hotmail.fr>
**/
class AuthenticationSuccessListener
{
/**
* @var EventDispatcherInterface
*/
private $dispatcher;
/**
* @var ClientManager
*/
private $cm;
public function __construct( EventDispatcherInterface $dispatcher , ClientManager $cm)
{
$this->dispatcher = $dispatcher;
$this->cm = $cm;
}
/**
* Authentication Success
*
* @param AuthenticationSuccessEvent $event
*/
public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event)
{
$user = $event->getUser();
if (!($user instanceof Client)) {
return;
}
if ($user->isActive() == true) {
$this->cm->resetNumberOfLoginFailures($user);
$payload = [];
$payload = $event->getData();
$payload['role'] = $user->getMobileRoles()->getName();
$this->dispatcher->dispatch(new ClientEvent($user),ClientEvents::CLIENT_LOGIN);
$event->setData([
'code' => $event->getResponse()->getStatusCode(),
'message' => 'Authentication Success',
'payload' => $payload,
]);
} else {
$event->getResponse()->setStatusCode(Response::HTTP_LOCKED);
$event->setData([
'code' => Response::HTTP_LOCKED,
'message' => 'Account Locked , Contact The Support ASAP '
]);
}
}
}