Commit 79e487de authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Possibilité d'envoyer le jeton à l'utilisateur par mail (date d'envoi enregistrée en bdd)

parent 60912b5a
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
    }
  ],
  "require": {
    "unicaen/app": "^3.2",
    "unicaen/auth": ">= 3.2.1",
    "ramsey/uuid": "^3.7"
  },
+6 −6
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ return [
                            TokenPrivilege::MODIFIER,
                            TokenPrivilege::SUPPRIMER,
                            TokenPrivilege::PROLONGER,
                            TokenPrivilege::TESTER,
                            TokenPrivilege::ENVOYER,
                        ],
                        'resources' => AbstractUserToken::RESOURCE_ID,
                    ],
@@ -141,9 +141,9 @@ return [
                [
                    'controller' => TokenController::class,
                    'action' => [
                        'tester',
                        'envoyer',
                    ],
                    'privileges' => TokenPrivilege::TESTER,
                    'privileges' => TokenPrivilege::ENVOYER,
                ],
            ],
        ],
@@ -248,15 +248,15 @@ return [
                                    ],
                                ],
                            ],
                            'tester' => [
                            'envoyer' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/tester/:userToken',
                                    'route' => '/envoyer/:userToken',
                                    'constraints' => [
                                        'userToken' => '\d+',
                                    ],
                                    'defaults' => [
                                        'action' => 'tester',
                                        'action' => 'envoyer',
                                    ],
                                ],
                            ],
+6 −3
Original line number Diff line number Diff line
@@ -14,7 +14,8 @@ create table USER_TOKEN
    ACTIONS_MAX_COUNT NUMBER default 0 not null,
    CREATED_ON DATE default sysdate not null,
    EXPIRED_ON DATE not null,
    LAST_USED_ON DATE
    LAST_USED_ON DATE,
    SENT_ON DATE
)
;
comment on table USER_TOKEN is 'Jetons d''authentification utilisateur'
@@ -35,6 +36,8 @@ comment on column USER_TOKEN.EXPIRED_ON is 'Date d''expiration du jeton'
;
comment on column USER_TOKEN.LAST_USED_ON is 'Date de dernière utilisation du jeton'
;
comment on column USER_TOKEN.SENT_ON is 'Date d''envoi du jeton à l''utilisateur par mail'
;

create unique index USER_TOKEN_USER_ACTION_UN
    on USER_TOKEN (USER_ID, ACTION)
@@ -60,7 +63,7 @@ with d(ordre, code, lib) as (
    select 40, 'modifier', 'Modifier un jeton utilisateur' from dual union
    select 50, 'prolonger', 'Prolonger un jeton utilisateur' from dual union
    select 60, 'supprimer', 'Supprimer un jeton utilisateur' from dual union
    select 70, 'tester', 'Tester un jeton utilisateur' from dual
    select 80, 'envoyer', 'Envoyer un jeton utilisateur par mail' from dual
)
select privilege_id_seq.nextval, cp.id, d.code, d.lib, d.ordre
from d
@@ -75,7 +78,7 @@ with d(code_cat, code_priv) as (
    select 'unicaen-auth-token', 'modifier' from dual union
    select 'unicaen-auth-token', 'prolonger' from dual union
    select 'unicaen-auth-token', 'supprimer' from dual union
    select 'unicaen-auth-token', 'tester' from dual
    select 'unicaen-auth-token', 'envoyer' from dual
)
select r.id, p.id
from d
+6 −3
Original line number Diff line number Diff line
@@ -14,7 +14,8 @@ create table user_token
    actions_max_count smallint default 0 not null,
    created_on date default current_timestamp not null,
    expired_on date not null,
    last_used_on date
    last_used_on date,
    sent_on date
);
comment on table user_token is 'Jetons d''authentification utilisateur'
;
@@ -34,6 +35,8 @@ comment on column user_token.expired_on is 'Date d''expiration du jeton'
;
comment on column user_token.last_used_on is 'Date de dernière utilisation du jeton'
;
comment on column user_token.sent_on is 'Date d''envoi du jeton à l''utilisateur par mail'
;

create unique index user_token_user_action_un
    on user_token (user_id, action)
@@ -59,7 +62,7 @@ with d(ordre, code, lib) as (
    select 40, 'modifier', 'Modifier un jeton utilisateur' union
    select 50, 'prolonger', 'Prolonger un jeton utilisateur' union
    select 60, 'supprimer', 'Supprimer un jeton utilisateur' union
    select 70, 'tester', 'Tester un jeton utilisateur'
    select 80, 'envoyer', 'Envoyer un jeton utilisateur par mail'
)
select privilege_id_seq.nextval, cp.id, d.code, d.lib, d.ordre
from d
@@ -74,7 +77,7 @@ with d(code_cat, code_priv) as (
    select 'unicaen-auth-token', 'modifier' union
    select 'unicaen-auth-token', 'prolonger' union
    select 'unicaen-auth-token', 'supprimer' union
    select 'unicaen-auth-token', 'tester'
    select 'unicaen-auth-token', 'envoyer'
)
select r.id, p.id
from d
+32 −15
Original line number Diff line number Diff line
@@ -3,8 +3,9 @@
namespace UnicaenAuthToken\Controller;

use InvalidArgumentException;
use RuntimeException;
use UnexpectedValueException;
use UnicaenApp\Mvc\RedirectResponse;
use UnicaenAuth\Controller\AuthController;
use UnicaenAuth\Entity\Db\UserInterface;
use UnicaenAuth\Service\Traits\UserServiceAwareTrait;
use UnicaenAuthToken\Entity\Db\AbstractUserToken;
@@ -39,6 +40,11 @@ class TokenController extends AbstractActionController
     */
    private $redirectResponse;

    /**
     * @var \Zend\View\Renderer\PhpRenderer
     */
    private $renderer;

    /**
     * @param RedirectResponse $redirectResponse
     */
@@ -75,7 +81,7 @@ class TokenController extends AbstractActionController
        try {
            $userToken = $this->tokenService->createUserToken();
        } catch (TokenServiceException $e) {
            throw new \RuntimeException("Erreur rencontrée lors de la création du jeton", null, $e);
            throw new RuntimeException("Erreur rencontrée lors de la création du jeton", null, $e);
        }

        if ($userId !== null) {
@@ -182,7 +188,7 @@ class TokenController extends AbstractActionController
            $this->flashMessenger()->addSuccessMessage(
                "Le jeton de l'utilisateur {$userToken->getUserId()} a été supprimé avec succès.");
        } catch (TokenServiceException $e) {
            throw new InvalidArgumentException("Impossible de prolonger le jeton utilisateur spécifié.");
            throw new RuntimeException("Impossible de prolonger le jeton utilisateur spécifié.");
        }

        $redirectCallback = $this->redirectResponse;
@@ -197,11 +203,13 @@ class TokenController extends AbstractActionController
        try {
            $this->tokenService->saveUserToken($userToken);

            $this->flashMessenger()->addSuccessMessage(
                "La date d'expiration du jeton de l'utilisateur {$userToken->getUserId()} a été portée avec succès au " .
                $userToken->getExpiredOnToString());
            $this->flashMessenger()->addSuccessMessage(sprintf(
                "La date d'expiration du jeton de l'utilisateur %d a été portée avec succès au %s.",
                $userToken->getUserId(),
                $userToken->getExpiredOnToString()
            ));
        } catch (TokenServiceException $e) {
            throw new InvalidArgumentException("Impossible de prolonger le jeton utilisateur spécifié.");
            throw new RuntimeException("Impossible de prolonger le jeton utilisateur spécifié.");
        }

        $redirectCallback = $this->redirectResponse;
@@ -209,14 +217,23 @@ class TokenController extends AbstractActionController
        return $redirectCallback('unicaen-auth-token/token');
    }

    public function testerAction(): Response
    public function envoyerAction(): Response
    {
        $userToken = $this->getRequestedUserToken();
        $this->forward()->dispatch(AuthController::class, ['action' => 'logout']);
        try {
            $message = $this->tokenService->sendUserToken($userToken);

        $this->tokenService->injectLogInUriInUserTokens([$userToken]);
            $this->flashMessenger()->addSuccessMessage(sprintf(
                "Le jeton utilisateur a été envoyé avec succès à %s.",
                $message->getTo()->rewind()->getEmail()
            ));
        } catch (TokenServiceException $e) {
            throw new RuntimeException("Erreur rencontrée lors de l'envoi du jeton utilisateur.");
        }

        return $this->redirect()->toUrl($userToken->getLogInUri()->toString());
        $redirectCallback = $this->redirectResponse;

        return $redirectCallback('unicaen-auth-token/token');
    }

    /**
@@ -226,12 +243,12 @@ class TokenController extends AbstractActionController
    {
        $id = $this->params('userToken');
        if ($id === null) {
            throw new InvalidArgumentException("Un id de jeton utilisateur doit être spécifié dans la requête.");
            throw new UnexpectedValueException("Un id de jeton utilisateur doit être spécifié dans la requête.");
        }

        $userToken = $this->tokenService->findUserTokenById($id);
        if ($userToken === null) {
            throw new InvalidArgumentException("Le jeton utilisateur spécifié dans la requête n'existe pas.");
            throw new UnexpectedValueException("Le jeton utilisateur spécifié dans la requête n'existe pas.");
        }

        return $userToken;
@@ -245,10 +262,10 @@ class TokenController extends AbstractActionController
    {
        $user = $this->userService->getUserMapper()->findById($id);
        if ($user === null) {
            throw new InvalidArgumentException(sprintf("Aucun utilisateur trouvé avec l'id %d.", $id));
            throw new UnexpectedValueException(sprintf("Aucun utilisateur trouvé avec l'id %d.", $id));
        }
        if (! $user instanceof UserInterface) {
            throw new InvalidArgumentException(sprintf(
            throw new UnexpectedValueException(sprintf(
                "Le service de recherche d'utilisateur doit retourner des instances de type %s.",
                UserInterface::class
            ));
Loading