src/Controller/ResetPasswordController.php line 28

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ResetPassword;
  4. use App\Entity\User;
  5. use App\Form\ResetPasswordType;
  6. use App\Service\MailService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. class ResetPasswordController extends AbstractController
  14. {
  15.     private $em;
  16.     public function __construct(EntityManagerInterface $em)
  17.     {
  18.         $this->em $em;
  19.     }
  20.     #[Route('/reset/password'name'app_reset_password')]
  21.     public function index(Request $requestMailService $mailService): Response
  22.     {
  23.         if ($this->getUser()) {
  24.             return $this->redirectToRoute('app_main');
  25.         }
  26.         if ($username $request->request->get('username')) {
  27.             $domaine =  $request->server->get('HTTP_HOST');
  28.             $user $this->em->getRepository(User::class)->findOneBy(['username' => $username]);
  29.             if ($user) {
  30.                 $resetPassword = new ResetPassword();
  31.                 $resetPassword->setUser($user);
  32.                 $resetPassword->setToken(uniqid('lm' $user->getId(), '45') . '-' uniqid());
  33.                 $resetPassword->setCreatedAt(new \DateTime());
  34.                 $this->em->persist($resetPassword);
  35.                 $this->em->flush();
  36.                 $subject 'Réinitialiser votre mot de passe';
  37.                 $fullName $user->getFirstname() . ' ' $user->getlastname();
  38.                 $url $this->generateUrl('reset_new_password', ['token' => $resetPassword->getToken()]);
  39.                 $test $mailService->sendMail($user->getEmail(), $subject$this->renderView('registration/mail_reset_password.html.twig', @compact('user''fullName''url''domaine')));
  40.                 $this->addFlash('notice''Un email vous a été envoyé pour changer de mot de passe.');
  41.             } else {
  42.                 $this->addFlash('error''Email not found !');
  43.             }
  44.         }
  45.         return $this->render('reset_password/first_step.html.twig', []);
  46.     }
  47.     #[Route('/reset/new-password/{token}'name'reset_new_password')]
  48.     public function restPassword($tokenRequest $requestUserPasswordHasherInterface $userPasswordHasher)
  49.     {
  50.         if ($this->getUser()) {
  51.             return $this->redirectToRoute('app_main');
  52.         }
  53.         $tokenData $this->em->getRepository(ResetPassword::class)->findOneByToken($token);
  54.         if (!$tokenData) {
  55.             $this->addFlash('error''Token not found !');
  56.             return $this->redirectToRoute('app_reset_password');
  57.         }
  58.         $now = new \DateTime();
  59.         if ($now $tokenData->getCreatedAt()->modify('+1 hour')) {
  60.             $this->addFlash('error''This request to change password has expired');
  61.             return $this->redirectToRoute('app_reset_password');
  62.         }
  63.         $form $this->createForm(ResetPasswordType::class);
  64.         $form->remove('submit');
  65.         $form->handleRequest($request);
  66.         if ($form->isSubmitted() and $form->isValid()) {
  67.             $user $tokenData->getUser();
  68.             $password $form->get('password')->getData();
  69.             $newPassword =  $userPasswordHasher->hashPassword($user$password);
  70.             $user->setPassword($newPassword);
  71.             $this->em->flush();
  72.             $this->addFlash('notice''Your password has updated successful');
  73.             return $this->redirectToRoute('app_login');
  74.         }
  75.         return $this->render('reset_password/second_step.html.twig', array('form' => $form->createView()));
  76.     }
  77. }