src\Controller\ResetPasswordController.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ResetPassword;
  4. use App\Entity\User;
  5. use App\Form\ResetPasswordType;
  6. use App\Mails\Mailer;
  7. use App\Repository\PubliciteRepository;
  8. use App\Repository\ServiceRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  14. class ResetPasswordController extends AbstractController
  15. {
  16.     public function __construct(private readonly EntityManagerInterface $em)
  17.     {
  18.     }
  19.     #[Route(path'/password/forgot'name'reset_password')]
  20.     public function index(
  21.         Request $request,
  22.         PubliciteRepository $publiciteRepository,
  23.         ServiceRepository $serviceRepository,
  24.         Mailer $mailer
  25.     )
  26.     {
  27.         $verif=$request->request->get('control_');
  28.         $email=$request->request->get('email');
  29.         if($verif == 'forgot'){
  30.             if($email != null){
  31.                 $user=$this->em->getRepository(User::class)->findOneBy(['email'=>$email,'status'=>true]);
  32.                 if($user){
  33.                     $oldRequest=$user->getResetPasswords();
  34.                     foreach ($oldRequest as $item) {
  35.                         $item->setActive(false);
  36.                     }
  37.                     $token=time().uniqid();
  38.                     $token=sha1($token);
  39.                     $expires=new \DateTime();
  40.                     $expires->modify('+1 hours');
  41.                     $resetRequest=new ResetPassword();
  42.                     $resetRequest->setActive(true)
  43.                     ->setToken($token)
  44.                     ->setExpiresAt($expires);
  45.                     $user->addResetPassword($resetRequest);
  46.                     $this->em->persist($resetRequest);
  47.                     $this->em->flush();
  48.                     //sending mail
  49.                     $mailer->send($user->getEmail(),"Changement de mot de passe sur Orishas-finance",$this->renderView('mails/change_password.html.twig',[
  50.                         'token'=>$token,
  51.                         ])
  52.                     );
  53.                     $this->addFlash('success',"Un message de restauration de mot de passe est envoyé à votre adresse mail. Veuillez consulter vos messges pour continuer.");
  54.                     return $this->redirectToRoute('reset_password');
  55.                 }else{
  56.                     $this->addFlash('error',"Ce compte n'existe pas ou est désactivé.");
  57.                 }
  58.             }else{
  59.                 $this->addFlash('error',"Veuillez saisir une adresse Email valide.");
  60.             }
  61.         }
  62.         return $this->render('site/auth/forgot.html.twig', [
  63.             'email'=>$email,
  64.             'services' => $serviceRepository->FindAll(),
  65.             'publicites' => $publiciteRepository->FindAll(),
  66.         ]);
  67.     }
  68.     #[Route(path'/password/new/{token}'name'new_password')]
  69.     public function new_password(ResetPassword $password,Request $requestUserPasswordEncoderInterface $passwordEncoder,PubliciteRepository $publiciteRepository,ServiceRepository $serviceRepository)
  70.     {
  71.         if($password->getValidatedAt()){
  72.             return $this->redirectToRoute('app_login');
  73.         }
  74.         else if(!$password->getActive() || $password->getValidatedAt() || $password->getExpiresAt() < new \DateTime()){
  75.             $this->addFlash('error',"Lien expiré. Veuillez effectuer une nouvelle demande.");
  76.             return $this->redirectToRoute('reset_password');
  77.         }else{
  78.             $user $this->em->getRepository(User::class)->findOneBy(['id'=>$password->getUser()->getId()]);
  79.             $form $this->createForm(ResetPasswordType::class, $user);
  80.             $form->handleRequest($request);
  81.             if ($form->isSubmitted() && $form->isValid()) {
  82.                 $user->setPassword(
  83.                     $passwordEncoder->encodePassword(
  84.                         $user,
  85.                         $form->get('plainPassword')->getData()
  86.                     )
  87.                 );
  88.                 $password->setValidatedAt(new \DateTime());
  89.                 $this->em->flush();
  90.                 return $this->redirectToRoute('app_login');
  91.             }
  92.         }
  93.         return $this->render('site/auth/new_password.html.twig', [
  94.             'form' => $form->createView(),
  95.         ]);
  96.     }
  97. }