Skip to content
Snippets Groups Projects
Select Git revision
  • 9a3f455ca6d13cdd4fb09d66207d4a6cf42ff7c8
  • master default protected
  • ll-workflow
  • alc-scindage-donnees-pj
  • b24
  • FJ_LL_Tbl_Contrat
  • alc-docker-node
  • ll-apiplatform
  • php84
  • ll-rgpd
  • b23
  • alc-filtre-type-intervenant
  • ll-sans-mdb5
  • formules-ancienne-infra
  • ll-formules
  • alc-intervenant-dmep
  • ll-suppr-v_vol-s
  • b20
  • ll-postgresql
  • b23.0.1
  • b22
  • 24.8
  • 24.7
  • 24.6
  • 24.5
  • 24.4
  • 24.3
  • 24.2
  • 24.1
  • 24.0
  • 23.15
  • 24.0-beta19
  • 24.0-beta18
  • 24.0-beta17
  • 24.0-beta16
  • 24.0-beta15
  • 24.0-beta14
  • 24.0-beta13
  • 23.14
  • 24.0-beta12
  • 24.0-beta11
41 results

FormAwareTrait.php

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    TokenAdapter.php 2.48 KiB
    <?php
    
    namespace UnicaenAuthToken\Authentication\Adapter;
    
    use RuntimeException;
    use UnicaenAuthentification\Authentication\Adapter\AbstractDb;
    use UnicaenAuthToken\Service\TokenServiceAwareTrait;
    use UnicaenAuthToken\Service\TokenServiceException;
    use Laminas\Authentication\Result as AuthenticationResult;
    use ZfcUser\Entity\UserInterface;
    
    /**
     * Adpater d'authentification à partir d'un token.
     *
     * @author Unicaen
     *
     * @property \UnicaenAuthToken\Options\ModuleOptions $moduleOptions
     */
    class TokenAdapter extends AbstractDb
    {
        use TokenServiceAwareTrait;
    
        const TYPE = 'token';
        protected $type = self::TYPE;
    
        /**
         * @inheritDoc
         */
        protected function fetchUserObject(): ?UserInterface
        {
            /** @var \Laminas\Http\Request $request */
            $request = $this->event->getRequest();
            $token = $request->getPost()->get('identity');
    
            $userToken= $this->tokenService->findUserTokenByToken($token);
            if ($userToken === null) {
                $this->event
                    ->setCode(AuthenticationResult::FAILURE_IDENTITY_NOT_FOUND)
                    ->setMessages([]);
                $this->setSatisfied(false);
                return null;
            }
    
            if ($userToken->isExpired()) {
                $this->event
                    ->setCode(AuthenticationResult::FAILURE_UNCATEGORIZED)
                    ->setMessages(["Ce jeton n'est plus utilisable car il a expiré."]);
                $this->setSatisfied(false);
                return null;
            }
            if ($userToken->isActionsMaxCountReached()) {
                $this->event
                    ->setCode(AuthenticationResult::FAILURE_UNCATEGORIZED)
                    ->setMessages(["Ce jeton n'est plus utilisable car il a atteint son nombre maximum d'utilisations."]);
                $this->setSatisfied(false);
                return null;
            }
    
            $userToken->incrementActionsCount();
            $userToken->setLastUsedOn();
            try {
                $this->tokenService->saveUserToken($userToken);
            } catch (TokenServiceException $e) {
                throw new RuntimeException("Impossible d'incrémenter le jeton.", null, $e);
            }
    
            $userObject = $this->mapper->findById($userToken->getUserId());
            if ($userObject === null) {
                throw new RuntimeException("Le jeton fait référence à un utilisateur introuvable.");
            }
    
            return $userObject;
        }
    
        /**
         * @inheritDoc
         */
        protected function authenticateUserObject(UserInterface $userObject): bool
        {
            return true;
        }
    }