<?php
namespace App\EventSubscriber;
use App\Entity\Users;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
use Symfony\Component\Security\Http\Event\CheckPassportEvent;
class CheckVerifiedUserSubscriber implements EventSubscriberInterface
{
protected RouterInterface $router;
/**
* @param RouterInterface $router
*/
public function __construct(RouterInterface $router)
{
$this->router = $router;
}
/**
* @throws \Exception
*/
public function onCheckPassport(CheckPassportEvent $event)
{
$passport = $event->getPassport();
if (!$passport instanceof Passport) {
throw new \Exception('Unexpected passport type');
}
$user = $passport->getUser();
if (!$user instanceof Users) {
throw new \Exception('Unexpected user type');
}
if ($user->getIsDeleted() === true)
{
throw new CustomUserMessageAuthenticationException(
'Désolé votre compte a été banni'
);
}
if ($user->getStatus() === false){
throw new CustomUserMessageAuthenticationException(
'Désolé votre compte est inactif, veuillez contacter l\'administrateur'
);
}
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents(): array
{
return [
CheckPassportEvent::class => ['onCheckPassport', -10],
];
}
}