Skip to content
Snippets Groups Projects
Select Git revision
  • ceac81cd2b986971a0af8e749283f2387f8f1ae6
  • master default protected
  • cleanup_fixtures
  • add-openvox
  • freebsd-14
  • remove-legacy-top-scope-syntax
  • rel430
  • tests
  • revert-363-augeas-module-cleanup
  • release-4.1.0
  • puppet8
  • relax-dependencies
  • rel400
  • mode
  • puppet7
  • release-3.1.0
  • freebsd13
  • freebsd11
  • stdlib
  • centos
  • fedora
  • v5.1.0
  • v5.0.0
  • v4.5.0
  • v4.4.0
  • v4.3.0
  • v4.2.1
  • v4.2.0
  • v4.1.0
  • v4.0.0
  • v3.1.0
  • v3.0.0
  • v2.0.0
  • 1.12.0
  • 1.11.0
  • 1.10.0
  • 1.9.0
  • 1.8.0
  • 1.7.0
  • 1.6.0
  • 1.5.0
41 results

init.pp

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.");
            }