src/Subscriber/Check2FaEnabledSubscriber.php line 28

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Subscriber;
  4. use App\Entity\User;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\Routing\RouterInterface;
  8. use Symfony\Component\Security\Http\Authenticator\Passport\Passport;
  9. use Symfony\Component\Security\Http\Event\CheckPassportEvent;
  10. class Check2FaEnabledSubscriber implements EventSubscriberInterface
  11. {
  12.     public function __construct(private RouterInterface $router)
  13.     {
  14.     }
  15.     public static function getSubscribedEvents()
  16.     {
  17.         return [
  18.             CheckPassportEvent::class => 'onCheckPassport',
  19.         ];
  20.     }
  21.     public function onCheckPassport(CheckPassportEvent $event)
  22.     {
  23.         $passport $event->getPassport();
  24.         if (!$passport instanceof Passport) {
  25.             throw new \Exception('Unexpected passport type');
  26.         }
  27.         $user $passport->getUser();
  28.         if (!$user instanceof User) {
  29.             throw new \Exception('Unexpected user type');
  30.         }
  31.         if (!$user->isTotpAuthenticationEnabled()) {
  32.             $response = new RedirectResponse($this->router->generate('app_2fa_enable'));
  33.             return $response->send();
  34.         }
  35.     }
  36. }