<?php
namespace App\EventSubscriber;
use Psr\Log\LoggerInterface;
use Lexik\Bundle\JWTAuthenticationBundle\Exception\UserNotFoundException;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
use Symfony\Component\Security\Http\Event\LoginFailureEvent;
use Symfony\Component\Security\Http\Event\LoginSuccessEvent;
class JwtAuthenticatorSubscriber implements EventSubscriberInterface
{
/**
* @var LoggerInterface
*/
private $dbLogger;
public function __construct(LoggerInterface $dbLogger)
{
$this->dbLogger = $dbLogger;
}
public function onLoginSuccess(LoginSuccessEvent $event)
{
if ('jwt_login' == $event->getFirewallName()) {
$roles = $event->getUser()->getRoles();
$valid = (in_array('ROLE_API_USER', $roles) && (in_array('ROLE_PHONE', $roles) || in_array('ROLE_MAIL', $roles)));
if (!$valid) {
$event->setResponse(new JsonResponse([
'code' => 401,
'message' => 'Érvénytelen hitelesítési információk.'
], 401
));
}
$this->dbLogger->info(sprintf("Sikeres API bejelentkezés: %s", $event->getUser()->getUserIdentifier()),
[
'clientIp' => $event->getRequest()->getClientIp()
]
);
}
}
public function onLoginFailure(LoginFailureEvent $event)
{
if ('jwt_login' == $event->getFirewallName()) {
$this->dbLogger->info(sprintf("Sikertelen API bejelentkezés!"),
[
'clientIp' => $event->getRequest()->getClientIp()
]
);
}
}
public static function getSubscribedEvents()
{
return [
LoginSuccessEvent::class => 'onLoginSuccess',
LoginFailureEvent::class => 'onLoginFailure'
];
}
}