diff --git a/lib/RoadizCoreBundle/src/Doctrine/EventSubscriber/UserLifeCycleSubscriber.php b/lib/RoadizCoreBundle/src/Doctrine/EventSubscriber/UserLifeCycleSubscriber.php index f6183e1b..474fe951 100644 --- a/lib/RoadizCoreBundle/src/Doctrine/EventSubscriber/UserLifeCycleSubscriber.php +++ b/lib/RoadizCoreBundle/src/Doctrine/EventSubscriber/UserLifeCycleSubscriber.php @@ -189,8 +189,8 @@ public function prePersist(LifecycleEventArgs $event): void $user->setPasswordRequestedAt(new \DateTime()); $user->setConfirmationToken($tokenGenerator->generateToken()); - $this->userViewer->setUser($user); $this->userViewer->sendPasswordResetLink( + $user, 'loginResetPage', '@RoadizCore/email/users/welcome_user_email.html.twig', '@RoadizCore/email/users/welcome_user_email.txt.twig' diff --git a/lib/RoadizCoreBundle/src/Security/User/UserViewer.php b/lib/RoadizCoreBundle/src/Security/User/UserViewer.php index e8681701..5c9c3375 100644 --- a/lib/RoadizCoreBundle/src/Security/User/UserViewer.php +++ b/lib/RoadizCoreBundle/src/Security/User/UserViewer.php @@ -6,13 +6,16 @@ use Psr\Log\LoggerInterface; use RZ\Roadiz\CoreBundle\Bag\Settings; -use RZ\Roadiz\CoreBundle\Entity\NodesSources; use RZ\Roadiz\CoreBundle\Entity\User; use RZ\Roadiz\CoreBundle\Mailer\EmailManager; use Symfony\Cmf\Component\Routing\RouteObjectInterface; use Symfony\Component\Mailer\Exception\TransportException; +use Symfony\Component\Mailer\Exception\TransportExceptionInterface; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Contracts\Translation\TranslatorInterface; +use Twig\Error\LoaderError; +use Twig\Error\RuntimeError; +use Twig\Error\SyntaxError; class UserViewer { @@ -21,7 +24,6 @@ class UserViewer protected TranslatorInterface $translator; protected EmailManager $emailManager; protected LoggerInterface $logger; - protected ?User $user = null; public function __construct( Settings $settingsBag, @@ -40,21 +42,23 @@ public function __construct( /** * Send email to reset user password. * - * @param string|NodesSources $route + * @param User $user + * @param object|string $route * @param string $htmlTemplate * @param string $txtTemplate * * @return bool - * @throws \Exception + * @throws TransportExceptionInterface + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError */ public function sendPasswordResetLink( - $route = 'loginResetPage', + User $user, + object|string $route = 'loginResetPage', string $htmlTemplate = '@RoadizCore/email/users/reset_password_email.html.twig', string $txtTemplate = '@RoadizCore/email/users/reset_password_email.txt.twig' ): bool { - if (null === $this->user) { - throw new \InvalidArgumentException('User should be defined before sending email.'); - } $emailContact = $this->getContactEmail(); $siteName = $this->getSiteName(); @@ -62,7 +66,7 @@ public function sendPasswordResetLink( $resetLink = $this->urlGenerator->generate( $route, [ - 'token' => $this->user->getConfirmationToken(), + 'token' => $user->getConfirmationToken(), ], UrlGeneratorInterface::ABSOLUTE_URL ); @@ -71,14 +75,14 @@ public function sendPasswordResetLink( RouteObjectInterface::OBJECT_BASED_ROUTE_NAME, [ RouteObjectInterface::ROUTE_OBJECT => $route, - 'token' => $this->user->getConfirmationToken(), + 'token' => $user->getConfirmationToken(), ], UrlGeneratorInterface::ABSOLUTE_URL ); } $this->emailManager->setAssignation([ 'resetLink' => $resetLink, - 'user' => $this->user, + 'user' => $user, 'site' => $siteName, 'mailContact' => $emailContact, ]); @@ -87,7 +91,7 @@ public function sendPasswordResetLink( $this->emailManager->setSubject($this->translator->trans( 'reset.password.request' )); - $this->emailManager->setReceiver($this->user->getEmail()); + $this->emailManager->setReceiver($user->getEmail()); $this->emailManager->setSender([$emailContact => $siteName]); try { @@ -129,22 +133,4 @@ protected function getSiteName(): string return $siteName; } - - /** - * @return null|User - */ - public function getUser(): ?User - { - return $this->user; - } - - /** - * @param null|User $user - * @return UserViewer - */ - public function setUser(?User $user) - { - $this->user = $user; - return $this; - } } diff --git a/lib/RoadizCoreBundle/src/Traits/LoginRequestTrait.php b/lib/RoadizCoreBundle/src/Traits/LoginRequestTrait.php index d804a62d..3289a1a0 100644 --- a/lib/RoadizCoreBundle/src/Traits/LoginRequestTrait.php +++ b/lib/RoadizCoreBundle/src/Traits/LoginRequestTrait.php @@ -52,8 +52,7 @@ public function sendConfirmationEmail( $user->setConfirmationToken($tokenGenerator->generateToken()); $entityManager->flush(); $userViewer = $this->getUserViewer(); - $userViewer->setUser($user); - $userViewer->sendPasswordResetLink($resetRoute); + $userViewer->sendPasswordResetLink($user, $resetRoute); return true; } catch (\Exception $e) { $user->setPasswordRequestedAt(null); diff --git a/lib/RoadizRozierBundle/src/Controller/Login/LoginRequestController.php b/lib/RoadizRozierBundle/src/Controller/Login/LoginRequestController.php index dee26204..81036e3f 100644 --- a/lib/RoadizRozierBundle/src/Controller/Login/LoginRequestController.php +++ b/lib/RoadizRozierBundle/src/Controller/Login/LoginRequestController.php @@ -40,7 +40,7 @@ protected function getUserViewer(): UserViewer * @throws \Doctrine\ORM\ORMException * @throws \Doctrine\ORM\OptimisticLockException */ - public function indexAction(Request $request) + public function indexAction(Request $request): Response { $form = $this->createForm(LoginRequestForm::class); $form->handleRequest($request); @@ -71,7 +71,7 @@ public function indexAction(Request $request) /** * @return Response */ - public function confirmAction() + public function confirmAction(): Response { return $this->render('@RoadizRozier/login/requestConfirm.html.twig', $this->assignation); } diff --git a/lib/RoadizUserBundle/config/services.yaml b/lib/RoadizUserBundle/config/services.yaml index c3c99abd..3b981ce8 100644 --- a/lib/RoadizUserBundle/config/services.yaml +++ b/lib/RoadizUserBundle/config/services.yaml @@ -2,7 +2,7 @@ parameters: env(USER_PASSWORD_RESET_URL): 'loginResetPage' env(USER_VALIDATION_URL): 'http://example.test/my-account/validate' - env(USER_PASSWORD_RESET_EXPIRES_IN): '600' + env(USER_PASSWORD_RESET_EXPIRES_IN): '900' env(USER_VALIDATION_EXPIRES_IN): '3600' services: