src/Core/Security/Voter/CsrfTokenVoter.php line 13

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Core\Security\Voter;
  3. use Harmonizely\Core\Exception\AccessDeniedException;
  4. use Harmonizely\Core\Security\Contract\ICsrfTokenValidator;
  5. use Harmonizely\Core\Security\Contract\ISecurityHelper;
  6. use Harmonizely\Core\Security\Contract\ISuperAdminSecurityHelper;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
  10. class CsrfTokenVoter implements VoterInterface
  11. {
  12.     /**
  13.      * @var ICsrfTokenValidator
  14.      */
  15.     private ICsrfTokenValidator $csrfTokenValidator;
  16.     /**
  17.      * @var ISecurityHelper
  18.      */
  19.     private ISecurityHelper $securityHelper;
  20.     /**
  21.      * CsrfTokenVoter constructor.
  22.      *
  23.      * @param ICsrfTokenValidator $csrfTokenValidator
  24.      * @param ISecurityHelper $securityHelper
  25.      */
  26.     public function __construct(ICsrfTokenValidator $csrfTokenValidatorISecurityHelper $securityHelper)
  27.     {
  28.         $this->csrfTokenValidator $csrfTokenValidator;
  29.         $this->securityHelper $securityHelper;
  30.     }
  31.     /**
  32.      * Returns the vote for the given parameters.
  33.      *
  34.      * This method must return one of the following constants:
  35.      * ACCESS_GRANTED, ACCESS_DENIED, or ACCESS_ABSTAIN.
  36.      *
  37.      * @param TokenInterface $token
  38.      * @param mixed $subject The subject to secure
  39.      * @param array $attributes An array of attributes associated with the method being invoked
  40.      *
  41.      * @return int either ACCESS_GRANTED, ACCESS_ABSTAIN, or ACCESS_DENIED
  42.      * @throws AccessDeniedException
  43.      */
  44.     public function vote(TokenInterface $token$subject, array $attributes): int
  45.     {
  46.         if ($subject instanceof Request) {
  47.             if (in_array(ISecurityHelper::IS_CSRF_REQUIRED$attributes) || in_array(ISuperAdminSecurityHelper::IS_SUPER_ADMIN_CSRF_REQUIRED$attributes)) {
  48.                 if (!in_array($this->securityHelper->getLoginType(), [ISecurityHelper::LOGIN_TYPE_LINKISecurityHelper::LOGIN_TYPE_API_TOKENISecurityHelper::LOGIN_TYPE_REMEMBER_ME])) {
  49.                     $this->csrfTokenValidator->validate();
  50.                 }
  51.             }
  52.         }
  53.         return self::ACCESS_ABSTAIN;
  54.     }
  55. }