<?php
namespace App\EventListener;
use App\Repository\LocationRepository;
use App\Repository\UserLocationRepository;
use App\Repository\UserRepository;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationFailureEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Response\JWTAuthenticationFailureResponse;
class AuthenticationFailureListener
{
private UserRepository $userRepository;
public function __construct(UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
public function onAuthenticationFailureResponse(AuthenticationFailureEvent $event)
{
$message = 'Bad credentials, please verify that your email/password are correctly set';
$request = $event->getRequest();
$contant = json_decode($request->getContent());
if ($contant->username) {
$username = $contant->username;
} else {
$username = $request->get('_username');
}
// Accede al nombre de usuario desde la peticiĆ³n HTTP
if ($username){
$user = $this->userRepository->findOneBy(['email' => $username]);
if ($user && $user->getIsAccessMicrosoft()) {
$message = 'Your account is enabled to use SSO only.';
}
}
$response = new JWTAuthenticationFailureResponse($message);
$event->setResponse($response);
}
}