src/Controller/ResetPasswordController.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Form\ResetUserPasswordType;
  4. use FOS\UserBundle\Mailer\MailerInterface;
  5. use FOS\UserBundle\Model\UserManagerInterface;
  6. use FOS\UserBundle\Util\TokenGeneratorInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. /**
  13.  *
  14.  * @final
  15.  */
  16. class ResetPasswordController extends AbstractController
  17. {
  18.     public function __construct(private UserManagerInterface $userManager, private TokenGeneratorInterface $tokenGenerator, private MailerInterface $mailer) {}
  19.     /**
  20.      * @Route("request", name="reset_password_request")
  21.      *
  22.      * @return Response
  23.      */
  24.     public function resetPasswordRequest(): Response
  25.     {      
  26.         return $this->render('user/password/reset_request.html.twig');
  27.     }
  28.     /**
  29.      * @Route("send/email", name="reset_password_send_email")
  30.      *
  31.      * @return Response
  32.      */
  33.     public function sendEmailAction(Request $request): Response
  34.     {
  35.         $username $request->request->get('username');
  36.         $user $this->userManager->findUserByUsernameOrEmail($username);
  37.         if (!is_null($user)) {
  38.             $user->setConfirmationToken($this->tokenGenerator->generateToken());
  39.             $user->setPasswordRequestedAt(new \DateTime());
  40.             $this->userManager->updateUser($user);
  41.             $this->mailer->sendResettingEmailMessage($user);
  42.         }
  43.         return new RedirectResponse($this->generateUrl('reset_password_check_email'));
  44.     }
  45.     /**
  46.      * @Route("check/email", name="reset_password_check_email")
  47.      *
  48.      * @return Response
  49.      */
  50.     public function checkEmailAction(Request $request): Response
  51.     {
  52.         return $this->render('user/password/check_email.html.twig'
  53.         [
  54.             'tokenValidity' => ceil($this->getParameter('reset_password_token_duration') / 3600),
  55.         ]);
  56.     }
  57.     /**
  58.      * @Route("new/{token}", name="reset_password_new")
  59.      *
  60.      * @param string $token
  61.      */
  62.     public function resetAction(Request $request$token): Response
  63.     {
  64.         $user $this->userManager->findUserByConfirmationToken($token);
  65.         if (is_null($user)) {
  66.             return new RedirectResponse($this->container->get('router')->generate('fos_user_security_login'));
  67.         }
  68.         if (!$user->isPasswordRequestNonExpired($this->getParameter('reset_password_token_duration')))
  69.         {
  70.             return new RedirectResponse($this->generateUrl('reset_password_expired'));
  71.         }
  72.         $form $this->createForm(ResetUserPasswordType::class, $user);
  73.         $form->handleRequest($request);
  74.         if ($form->isSubmitted() && $form->isValid()) {
  75.             $user->setConfirmationToken(null);
  76.             $this->userManager->updateUser($user);
  77.             $this->mailer->sendConfirmationEmailMessage($user);
  78.             return new RedirectResponse($this->generateUrl('reset_password_confirmation'));
  79.         }
  80.         return $this->render('user/password/new.html.twig', [
  81.             'token' => $token,
  82.             'form' => $form->createView(),
  83.         ]);
  84.     }
  85.     /**
  86.      * @Route("confirmation", name="reset_password_confirmation")
  87.      *
  88.      * @return Response
  89.      */
  90.     public function confirmationAction(): Response
  91.     {      
  92.         return $this->render('user/password/confirmation.html.twig');
  93.     }
  94.     /**
  95.      * @Route("expired", name="reset_password_expired")
  96.      *
  97.      * @return Response
  98.      */
  99.     public function expiredAction(): Response
  100.     {      
  101.         return $this->render('user/password/expired.html.twig');
  102.     }
  103. }