vendor/scheb/2fa-bundle/Security/Authorization/Voter/TwoFactorInProgressVoter.php line 16
<?php
declare(strict_types=1);
namespace Scheb\TwoFactorBundle\Security\Authorization\Voter;
use Scheb\TwoFactorBundle\Security\Authentication\Token\TwoFactorTokenInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter;
use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
use function defined;
/**
* @final
*/
class TwoFactorInProgressVoter implements VoterInterface
{
public const IS_AUTHENTICATED_2FA_IN_PROGRESS = 'IS_AUTHENTICATED_2FA_IN_PROGRESS';
/**
* {@inheritdoc}
*/
public function vote(TokenInterface $token, mixed $subject, array $attributes): int
{
if (!($token instanceof TwoFactorTokenInterface)) {
return VoterInterface::ACCESS_ABSTAIN;
}
foreach ($attributes as $attribute) {
if (self::IS_AUTHENTICATED_2FA_IN_PROGRESS === $attribute) {
return VoterInterface::ACCESS_GRANTED;
}
if (AuthenticatedVoter::PUBLIC_ACCESS === $attribute) {
return VoterInterface::ACCESS_GRANTED;
}
// Compatibility for Symfony < 6.0
if (
defined(AuthenticatedVoter::class.'::IS_AUTHENTICATED_ANONYMOUSLY')
&& AuthenticatedVoter::IS_AUTHENTICATED_ANONYMOUSLY === $attribute
) {
return VoterInterface::ACCESS_GRANTED;
}
}
return VoterInterface::ACCESS_ABSTAIN;
}
}