Skip to content
Snippets Groups Projects
Commit c3951533 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Suppression de la dépendance avec unicaen/app (l'envoi du jeton par mail est...

Suppression de la dépendance avec unicaen/app (l'envoi du jeton par mail est désormais à la charge de l'appli).
parent d803cf50
Branches master
Tags 7.1.0
No related merge requests found
Pipeline #34597 passed
CHANGELOG CHANGELOG
========= =========
7.1.0
-----
- Suppression de la dépendance avec unicaen/app (l'envoi du jeton par mail est désormais à la charge de l'appli).
7.0.0 7.0.0
----- -----
- Requiert les nouvelles bibliotèques unicaen/authentification et privilege. - Requiert les nouvelles bibliotèques unicaen/authentification et privilege.
......
...@@ -8,11 +8,9 @@ ...@@ -8,11 +8,9 @@
} }
], ],
"require": { "require": {
"unicaen/app": "^6.0",
"unicaen/authentification": "^6.2", "unicaen/authentification": "^6.2",
"unicaen/privilege": "^6.0", "unicaen/privilege": "^6.0",
"ramsey/uuid": "^3.7", "ramsey/uuid": "^3.7"
"laminas/laminas-dependency-plugin": "^2.1"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^8.0" "phpunit/phpunit": "^8.0"
...@@ -26,10 +24,5 @@ ...@@ -26,10 +24,5 @@
"classmap": [ "classmap": [
"./Module.php" "./Module.php"
] ]
},
"config": {
"allow-plugins": {
"laminas/laminas-dependency-plugin": true
}
} }
} }
...@@ -4,6 +4,8 @@ namespace UnicaenAuthToken; ...@@ -4,6 +4,8 @@ namespace UnicaenAuthToken;
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain; use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
use Doctrine\ORM\Mapping\Driver\XmlDriver; use Doctrine\ORM\Mapping\Driver\XmlDriver;
use UnicaenAuthToken\Mvc\RedirectResponse;
use UnicaenAuthToken\Mvc\RedirectResponseFactory;
use UnicaenPrivilege\Guard\PrivilegeController; use UnicaenPrivilege\Guard\PrivilegeController;
use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider; use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider;
use UnicaenAuthToken\Authentication\Adapter\TokenAdapter; use UnicaenAuthToken\Authentication\Adapter\TokenAdapter;
...@@ -272,6 +274,7 @@ return [ ...@@ -272,6 +274,7 @@ return [
TokenService::class => TokenServiceFactory::class, TokenService::class => TokenServiceFactory::class,
TokenLoginForm::class => TokenLoginFormFactory::class, TokenLoginForm::class => TokenLoginFormFactory::class,
TokenAdapter::class => TokenAdapterFactory::class, TokenAdapter::class => TokenAdapterFactory::class,
RedirectResponse::class => RedirectResponseFactory::class,
], ],
], ],
......
...@@ -9,8 +9,7 @@ use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger; ...@@ -9,8 +9,7 @@ use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
use Laminas\View\Model\ViewModel; use Laminas\View\Model\ViewModel;
use RuntimeException; use RuntimeException;
use UnexpectedValueException; use UnexpectedValueException;
use UnicaenApp\Mvc\RedirectResponse; use UnicaenAuthToken\Mvc\RedirectResponse;
use UnicaenApp\Service\Mailer\MailerServiceAwareTrait;
use UnicaenUtilisateur\Entity\Db\UserInterface; use UnicaenUtilisateur\Entity\Db\UserInterface;
use UnicaenAuthentification\Service\Traits\UserServiceAwareTrait; use UnicaenAuthentification\Service\Traits\UserServiceAwareTrait;
use UnicaenAuthToken\Entity\Db\AbstractUserToken; use UnicaenAuthToken\Entity\Db\AbstractUserToken;
...@@ -27,7 +26,6 @@ class TokenController extends AbstractActionController ...@@ -27,7 +26,6 @@ class TokenController extends AbstractActionController
{ {
use TokenServiceAwareTrait; use TokenServiceAwareTrait;
use UserServiceAwareTrait; use UserServiceAwareTrait;
use MailerServiceAwareTrait;
const PROLONG_SPEC = '+1 week'; const PROLONG_SPEC = '+1 week';
const PROLONG_SPEC_TOSTRING = '1 semaine'; const PROLONG_SPEC_TOSTRING = '1 semaine';
...@@ -40,8 +38,6 @@ class TokenController extends AbstractActionController ...@@ -40,8 +38,6 @@ class TokenController extends AbstractActionController
const EVENT_TOKEN_DELETE_AFTER = 'EVENT_TOKEN_DELETE_AFTER'; const EVENT_TOKEN_DELETE_AFTER = 'EVENT_TOKEN_DELETE_AFTER';
const EVENT_TOKEN_PROLONGATE_BEFORE_SAVE = 'EVENT_TOKEN_PROLONGATE_BEFORE_SAVE'; const EVENT_TOKEN_PROLONGATE_BEFORE_SAVE = 'EVENT_TOKEN_PROLONGATE_BEFORE_SAVE';
const EVENT_TOKEN_PROLONGATE_AFTER_SAVE = 'EVENT_TOKEN_PROLONGATE_AFTER_SAVE'; const EVENT_TOKEN_PROLONGATE_AFTER_SAVE = 'EVENT_TOKEN_PROLONGATE_AFTER_SAVE';
const EVENT_TOKEN_SEND_BEFORE = 'EVENT_TOKEN_SEND_BEFORE';
const EVENT_TOKEN_SEND_AFTER = 'EVENT_TOKEN_SEND_AFTER';
/** /**
* @var UserTokenForm * @var UserTokenForm
...@@ -84,10 +80,7 @@ class TokenController extends AbstractActionController ...@@ -84,10 +80,7 @@ class TokenController extends AbstractActionController
]; ];
} }
/** public function creerAction(): Response|ViewModel
* @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel
*/
public function creerAction()
{ {
$userId = $this->params('user'); $userId = $this->params('user');
...@@ -127,7 +120,14 @@ class TokenController extends AbstractActionController ...@@ -127,7 +120,14 @@ class TokenController extends AbstractActionController
$userToken->getExpiredOnToString() $userToken->getExpiredOnToString()
)); ));
$response = $this->triggerEvent(static::EVENT_TOKEN_CREATE_AFTER_SAVE, ['userToken' => $userToken, 'data' => $data]); // un message mail par défaut est fourni dans l'événement, son envoi éventuel restant à la charge de l'appli.
try {
$mailMessage = $this->tokenService->createUserTokenMail($userToken);
} catch (\InvalidArgumentException $e) {
$mailMessage = null;
}
$response = $this->triggerEvent(static::EVENT_TOKEN_CREATE_AFTER_SAVE, ['userToken' => $userToken, 'data' => $data, 'mailMessage' => $mailMessage]);
if ($response instanceof Response) { if ($response instanceof Response) {
return $response; return $response;
} }
...@@ -261,35 +261,19 @@ class TokenController extends AbstractActionController ...@@ -261,35 +261,19 @@ class TokenController extends AbstractActionController
return $redirectCallback('unicaen-auth-token/token'); return $redirectCallback('unicaen-auth-token/token');
} }
/**
* @deprecated
*/
public function envoyerAction(): Response public function envoyerAction(): Response
{ {
$userToken = $this->getRequestedUserToken(); $userToken = $this->getRequestedUserToken();
try {
$this->triggerEvent(static::EVENT_TOKEN_SEND_BEFORE, ['userToken' => $userToken]);
$message = $this->tokenService->createUserTokenMail($userToken); $message = $this->tokenService->createUserTokenMail($userToken);
try {
$message = $this->mailerService->send($message);
} catch (\Exception $e) {
throw new TokenServiceException("L'envoi du token par mail a échoué", null, $e);
}
$userToken->setSentOn(new \DateTime('now'));
$this->tokenService->saveUserToken($userToken);
$this->flashMessenger()->addSuccessMessage(sprintf( $this->flashMessenger()->addErrorMessage(sprintf(
"Le jeton utilisateur a été envoyé avec succès à %s.", "Le jeton utilisateur n'a pas été envoyé à %s, la bibliothèque n'envoie plus de mail !",
$message->getTo()->rewind()->getEmail() $message->getTo()->rewind()->getEmail()
)); ));
$response = $this->triggerEvent(static::EVENT_TOKEN_SEND_AFTER, ['userToken' => $userToken, 'message' => $message]);
if ($response instanceof Response) {
return $response;
}
} catch (TokenServiceException $e) {
throw new RuntimeException("Erreur rencontrée lors de l'envoi du jeton utilisateur.");
}
$redirectCallback = $this->redirectResponse; $redirectCallback = $this->redirectResponse;
return $redirectCallback('unicaen-auth-token/token'); return $redirectCallback('unicaen-auth-token/token');
......
...@@ -3,8 +3,7 @@ ...@@ -3,8 +3,7 @@
namespace UnicaenAuthToken\Controller; namespace UnicaenAuthToken\Controller;
use Interop\Container\ContainerInterface; use Interop\Container\ContainerInterface;
use UnicaenApp\Mvc\RedirectResponse; use UnicaenAuthToken\Mvc\RedirectResponse;
use UnicaenApp\Service\Mailer\MailerService;
use UnicaenAuthToken\Form\UserTokenForm; use UnicaenAuthToken\Form\UserTokenForm;
use UnicaenAuthToken\Service\TokenService; use UnicaenAuthToken\Service\TokenService;
use UnicaenAuthentification\Service\User as UserService; use UnicaenAuthentification\Service\User as UserService;
...@@ -33,9 +32,6 @@ class TokenControllerFactory ...@@ -33,9 +32,6 @@ class TokenControllerFactory
$redirectResponse = $container->get(RedirectResponse::class); $redirectResponse = $container->get(RedirectResponse::class);
$controller->setRedirectResponse($redirectResponse); $controller->setRedirectResponse($redirectResponse);
$mailerService = $container->get(MailerService::class);
$controller->setMailerService($mailerService);
return $controller; return $controller;
} }
} }
\ No newline at end of file
<?php
namespace UnicaenAuthToken\Mvc;
use Laminas\Http\PhpEnvironment\Request;
use Laminas\Http\PhpEnvironment\Response;
use Laminas\Mvc\Application;
use Laminas\Router\Exception;
use Laminas\Router\RouteInterface;
/**
* Buils a redirect response based on the current routing and parameters
*/
class RedirectResponse
{
/** @var RouteInterface */
private $router;
/** @var Application */
private $application;
/**
* @param Application $application
* @param RouteInterface $router
*/
public function __construct(Application $application, RouteInterface $router)
{
$this->router = $router;
$this->application = $application;
}
/**
* @param string $defaultRedirect
* @return Response
*/
public function __invoke(string $defaultRedirect): Response
{
$redirect = $this->getRedirect($defaultRedirect);
/** @var Response $response */
$response = $this->application->getResponse();
$response->getHeaders()->addHeaderLine('Location', $redirect);
$response->setStatusCode(302);
return $response;
}
/**
* @param string $defaultRedirect
* @return string|null
*/
protected function getRedirect(string $defaultRedirect): ?string
{
$redirect = $this->getRedirectFromRequest() ?: $defaultRedirect;
if ($this->routeExists($redirect)) {
return $this->router->assemble([], ['name' => $redirect]);
}
return $redirect;
}
/**
* @return string
*/
private function getRedirectFromRequest(): ?string
{
/** @var Request $request */
$request = $this->application->getRequest();
if ($redirectFromQuery = $request->getQuery('redirect')) {
return $redirectFromQuery;
}
if ($redirectFromPost = $request->getPost('redirect')) {
return $redirectFromPost;
}
return null;
}
/**
* @param string $route
* @return bool
*/
private function routeExists(string $route): bool
{
try {
$this->router->assemble([], ['name' => $route]);
} catch (Exception\RuntimeException $e) {
return false;
}
return true;
}
}
<?php
namespace UnicaenAuthToken\Mvc;
use Psr\Container\ContainerInterface;
use Laminas\Mvc\Application;
use Laminas\Router\RouteInterface;
class RedirectResponseFactory
{
/**
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
public function __invoke(ContainerInterface $container, $requestedName, array $options = null): RedirectResponse
{
/* @var RouteInterface $router */
$router = $container->get('Router');
/* @var Application $application */
$application = $container->get('Application');
return new RedirectResponse($application, $router);
}
}
<?php <?php
/** /**
* @var string|null $route
* @var string|null $redirect * @var string|null $redirect
* @var \UnicaenUtilisateur\Entity\Db\UserInterface|int|null $user * @var \UnicaenUtilisateur\Entity\Db\UserInterface|int|null $user
* @var \Application\View\Renderer\PhpRenderer $this * @var \Application\View\Renderer\PhpRenderer $this
...@@ -24,7 +25,7 @@ $creable = $this->isAllowed(new UserToken(), TokenPrivilege::CREER); ...@@ -24,7 +25,7 @@ $creable = $this->isAllowed(new UserToken(), TokenPrivilege::CREER);
'redirect' => $redirect ?: 'unicaen-auth-token/token', 'redirect' => $redirect ?: 'unicaen-auth-token/token',
]; ];
?> ?>
<a href="<?php echo $this->url('unicaen-auth-token/token/creer', $options, ['query' => $queryParams]) ?>" <a href="<?php echo $this->url($route ?: 'unicaen-auth-token/token/creer', $options, ['query' => $queryParams]) ?>"
class="btn btn-primary" title="Créer un nouveau jeton utilisateur">Nouveau jeton utilisateur</span></a> class="btn btn-primary" title="Créer un nouveau jeton utilisateur">Nouveau jeton utilisateur</span></a>
</p> </p>
<?php endif ?> <?php endif ?>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment