src/Controller/Auth/PasswordController.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Auth;
  3. use App\Data\PasswordResetConfirmData;
  4. use App\Data\PasswordResetRequestData;
  5. use App\Entity\Auth\User;
  6. use App\Entity\Profile\PasswordResetToken;
  7. use App\Form\Authentication\PasswordResetConfirmForm;
  8. use App\Form\Authentication\PasswordResetRequestForm;
  9. use App\Service\PasswordService;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Exception;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  18. class PasswordController extends AbstractController
  19. {
  20.     /**
  21.      * @var EntityManagerInterface
  22.      */
  23.     private EntityManagerInterface $manager;
  24.     public function __construct(EntityManagerInterface $manager)
  25.     {
  26.         $this->manager $manager;
  27.     }
  28.     /**
  29.      * @Route("/password/new", name="auth_password_reset")
  30.      * @param Request $request
  31.      * @param PasswordService $resetService
  32.      * @return Response
  33.      * @throws Exception
  34.      */
  35.     public function reset(Request $requestPasswordService $resetService): Response
  36.     {
  37.         $error null;
  38.         $data = new PasswordResetRequestData();
  39.         $form $this->createForm(PasswordResetRequestForm::class, $data);
  40.         $form->handleRequest($request);
  41.         if ($form->isSubmitted() && $form->isValid()) {
  42.             try {
  43.                 $resetService->resetPassword($form->getData());
  44.                 $this->addFlash('success''Les instructions pour réinitialiser votre mot de passe vous ont été envoyées');
  45.                 return $this->redirectToRoute('app_login');
  46.             } catch (AuthenticationException $e) {
  47.                 $error $e;
  48.             }
  49.         }
  50.         return $this->render('auth/password_reset.html.twig', [
  51.             'error' => $error,
  52.             'form' => $form->createView(),
  53.             'title'=> "Mot de passe oublié"
  54.         ]);
  55.     }
  56.     /**
  57.      * @Route("/password/new/{id<\d+>}/{token}", name="auth_password_reset_confirm")
  58.      * @param Request $request
  59.      * @param User $user
  60.      * @param string $token
  61.      * @param PasswordService $service
  62.      * @return Response
  63.      * @throws Exception
  64.      */
  65.     public function confirm(Request $requestUser $userstring $tokenPasswordService $service): Response
  66.     {
  67.         $passwordToken $this->manager->getRepository(PasswordResetToken::class)->findOneBy(['token' => $token]);
  68.         if (!$passwordToken || $service->isExpired($passwordToken) || $passwordToken->getUser() !== $user) {
  69.             $this->addFlash('error''Ce token a expiré');
  70.             return $this->redirectToRoute('app_login');
  71.         }
  72.         $error null;
  73.         $data = new PasswordResetConfirmData();
  74.         $form $this->createForm(PasswordResetConfirmForm::class, $data);
  75.         $form->handleRequest($request);
  76.         if ($form->isSubmitted() && $form->isValid()) {
  77.             $service->updatePassword($data->getPassword(), $passwordToken);
  78.             $this->addFlash('success''Votre mot de passe a bien été réinitialisé');
  79.             return $this->redirectToRoute('app_login');
  80.         }
  81.         return $this->render('auth/password_reset_confirm.html.twig', [
  82.             'error' => $error,
  83.             'form' => $form->createView(),
  84.             'title' => "Réinitialisation du mot de passe"
  85.         ]);
  86.     }
  87.     /**
  88.      * @Route("/password/update", name="auth_password_update")
  89.      * @param Request $request
  90.      * @param PasswordService $service
  91.      * @return Response
  92.      * @IsGranted("ROLE_PARENT")
  93.      */
  94.     public function newPassword(Request $requestPasswordService $service): Response
  95.     {
  96.         $error null;
  97.         $data = new PasswordResetConfirmData();
  98.         $form $this->createForm(PasswordResetConfirmForm::class, $data);
  99.         $form->handleRequest($request);
  100.         if ($form->isSubmitted() && $form->isValid()) {
  101.             $service->changePasswordOnFirstLogin($data->getPassword(), $this->getUser());
  102.             $this->addFlash('success''Votre mot de passe a bien été mise à jour');
  103.             return $this->redirectToRoute('homepage');
  104.         }
  105.         return $this->render('auth/password_change.html.twig', [
  106.             'error' => $error,
  107.             'form' => $form->createView()
  108.         ]);
  109.     }
  110. }