vendor/scheb/2fa-bundle/Security/TwoFactor/Event/TwoFactorFormListener.php line 27
<?php
declare(strict_types=1);
namespace Scheb\TwoFactorBundle\Security\TwoFactor\Event;
use Scheb\TwoFactorBundle\Security\Authentication\Token\TwoFactorTokenInterface;
use Scheb\TwoFactorBundle\Security\TwoFactor\TwoFactorFirewallConfig;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
* @final
*/
class TwoFactorFormListener implements EventSubscriberInterface
{
public function __construct(
private TwoFactorFirewallConfig $twoFactorFirewallConfig,
private TokenStorageInterface $tokenStorage,
private EventDispatcherInterface $eventDispatcher,
) {
}
public function onKernelRequest(RequestEvent $requestEvent): void
{
$request = $requestEvent->getRequest();
if (!$request->hasSession()) {
return;
}
if (!$this->twoFactorFirewallConfig->isAuthFormRequest($request)) {
return;
}
$token = $this->tokenStorage->getToken();
if (!($token instanceof TwoFactorTokenInterface)) {
return;
}
$event = new TwoFactorAuthenticationEvent($request, $token);
$this->eventDispatcher->dispatch($event, TwoFactorAuthenticationEvents::FORM);
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents(): array
{
return [KernelEvents::REQUEST => 'onKernelRequest'];
}
}