src/Controller/UserController.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\PasswordRecovery;
  4. use App\Form\UserRenewPasswordType;
  5. use App\Form\UserResetType;
  6. use App\Repository\PasswordRecoveryRepository;
  7. use App\Repository\UserRepository;
  8. use App\Service\CodeCreator;
  9. use App\Service\Mailer\Mailer;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class UserController extends AbstractController
  17. {
  18.     #[Route('/reset-password'name'app_user_reset_password')]
  19.     public function index(
  20.         Request $request,
  21.         UserRepository $userRepository,
  22.         Mailer $mailer,
  23.         PasswordRecoveryRepository $passwordRecoveryRepository,
  24.         EntityManagerInterface $manager,
  25.         CodeCreator $codeCreator
  26.     ): Response {
  27.         $form $this->createForm(UserResetType::class, []);
  28.         $form->handleRequest($request);
  29.         if($form->isSubmitted() && $form->isValid()) {
  30.             $user $userRepository->findOneBy(['email' => $form->get('email')->getData()]);
  31.             if($user) {
  32.                 $recoveries $user->getPasswordRecoveries();
  33.                 foreach ($recoveries as $recovery) {
  34.                     $manager->remove($recovery);
  35.                 }
  36.                 $newRecovery = new PasswordRecovery();
  37.                 $code = ($codeCreator(6));
  38.                 $newRecovery->setUser($user)->setCreatedAt(new \DateTimeImmutable('now'))->setCode($code);
  39.                 $manager->persist($newRecovery);
  40.                 $manager->flush();
  41.                 $mailer->sendRenewPasswordEmail($user$code);
  42.                 return $this->redirectToRoute('app_user_renew_password', ['recoveryId' => $newRecovery->getId()]);
  43.             }
  44.             $this->addFlash('error''adresse email inconnue');
  45.             return $this->redirectToRoute('app_user_reset_password');
  46.         }
  47.         return $this->render('user/reset.html.twig', [
  48.             'form' => $form->createView()
  49.         ]);
  50.     }
  51.     /**
  52.      * @throws \Exception
  53.      */
  54.     #[Route('/renew-password/{recoveryId}'name'app_user_renew_password')]
  55.     public function renew(
  56.         int $recoveryId,
  57.         Request $request,
  58.         UserRepository $userRepository,
  59.         PasswordRecoveryRepository $passwordRecoveryRepository,
  60.         UserPasswordHasherInterface $hasher
  61.     ): Response {
  62.         $recovery $passwordRecoveryRepository->find($recoveryId);
  63.         if(!$recovery) {
  64.             return $this->redirectToRoute('planning');
  65.         }
  66.         if($recovery->isOutOfDate()) {
  67.             $this->addFlash('error''Le délai de validité de la page a expiré');
  68.             return $this->redirectToRoute('app_login');
  69.         }
  70.         $form $this->createForm(UserRenewPasswordType::class, []);
  71.         $form->handleRequest($request);
  72.         if($form->isSubmitted() && $form->isValid()) {
  73.             if($recovery->isOutOfDate()) {
  74.                 $this->addFlash('error''Le délai de validité de la page a expiré');
  75.                 return $this->redirectToRoute('app_login');
  76.             }
  77.             if($form->get('pass')->getData() !== $form->get('password')->getData()) {
  78.                 $this->addFlash('error''Les mots de passe ne sont pas identiques');
  79.             }
  80.             if($form->get('code')->getData() !== $recovery->getCode()) {
  81.                 $this->addFlash('error''Le code est erronné');
  82.             }
  83.             $user $recovery->getUser();
  84.             $password $hasher->hashPassword($user$form->get('pass')->getData());
  85.             $user->setPassword($password);
  86.             $userRepository->save($usertrue);
  87.             $this->addFlash('success''Votre mot de passe a été modifié avec succès');
  88.             return $this->redirectToRoute('app_login');
  89.         }
  90.         return $this->render('user/renew.html.twig', [
  91.             'form' => $form->createView()
  92.         ]);
  93.     }
  94. }