src/Controller/ResetPasswordController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Classe\MailBrevo;
  4. use App\Classe\Mail;
  5. use App\Entity\ResetPassword;
  6. use App\Entity\User;
  7. use App\Form\ResetPasswordType;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  14. class ResetPasswordController extends AbstractController
  15. {
  16.     private $entityManager;
  17.     public function __construct(EntityManagerInterface $entityManager)
  18.     {
  19.         $this->entityManager $entityManager;
  20.     }
  21.     /**
  22.      * @Route("/mot-de-passe-oublie", name="reset_password")
  23.      */
  24.     public function index(Request $request): Response
  25.     {
  26.         //si le user est deja connu, on le redirige
  27.         if ($this->getUser()) {
  28.             return $this->redirectToRoute('app_login');
  29.         }
  30.         // get le mail
  31.         if ($request->get('email')) {
  32.             $user $this->entityManager->getRepository(User::class)->findOneByEmail($request->get('email'));
  33.             if ($user) {
  34.                 //enregistre en db la demande de changement de mot de passe
  35.                 $reset_password = new ResetPassword();
  36.                 $reset_password->setUser($user);
  37.                 $reset_password->setToken(uniqid());
  38.                 $reset_password->setCreatedAt(new \DateTime());
  39.                 $this->entityManager->persist($reset_password);
  40.                 $this->entityManager->flush();
  41.                 $url $this->generateUrl('update_password', [
  42.                     'token' => $reset_password->getToken()
  43.                 ]);
  44.                 $content "
  45.                     <p>Bonjour ".$user->getPrenom()." ".$user->getNom().",</p>
  46.                     <p>Vous avez fait une demande pour réinitialiser votre mot de passe.</p>
  47.                     <p>
  48.                         Le lien suivant vous permettra d'effectuer cette démarche.<br>
  49.                         <a href='https://passeurs-images.normandieimages.fr$url'>https://passeurs-images.normandieimages.fr$url</a>
  50.                     </p>
  51.                     <p style='margin-top: 10px'>
  52.                         Bien cordialement,<br>
  53.                         Normandie Images<br>
  54.                         Pôle régional d'éducation aux images
  55.                     </p>" ;
  56.                 $mail = new MailBrevo();
  57.                 $result $mail->send("stephanehortet@normandieimages.fr","Stéphane HORTET",$user->getEmail(),$user->getPrenom().' '.$user->getNom(),'Réinitialiser votre mot de passe',$content);
  58.                 //$this->addFlash('succes', $result );
  59.                 $this->addFlash('succes'"Un mail pour réinitialiser votre mot de passe vous a été envoyé." );
  60.             }else{
  61.                 $this->addFlash('echec'"Désolé, nous n'avons trouvé aucun compte existant avec cette adresse." );
  62.             }
  63.         }
  64.         return $this->render('reset_password/index.html.twig', [
  65.             'navbar_active' => 'etablissement',
  66.             'error' => NULL
  67.         ]);
  68.     }
  69.     /**
  70.      * @Route("/modifier-mon-mot-de-passe/{token}", name="update_password")
  71.      */
  72.     public function update(Request $request$tokenUserPasswordEncoderInterface $encoder): Response
  73.     {
  74.         $reset_password $this->entityManager->getRepository(ResetPassword::class)->findOneByToken($token);
  75.         if (!$reset_password){
  76.             return $this->redirectToRoute('reset_password');
  77.         }
  78.         // on donne un delai de 3h pour modifier le mdp avec le mail
  79.         $now = new  \DateTime();
  80.         if ($now $reset_password->getCreatedAt()->modify('+ 3 hour')){
  81.             //le temps est expiré
  82.             $this->addFlash('notice'"Votre demande de mot de passe a expiré. Merci de la renouveller." );
  83.             return $this->redirectToRoute('reset_password');
  84.         }
  85.         $form $this->createForm(ResetPasswordType::class);
  86.         $form->handleRequest($request);
  87.         if ($form->isSubmitted() && $form->isValid()){
  88.             $new_pwd $form->get('new_password')->getData();
  89.             $password $encoder->encodePassword($reset_password->getUser(), $new_pwd);
  90.             $reset_password->getUser()->setPassword($password);
  91.             $this->entityManager->persist($reset_password);
  92.             $this->entityManager->flush();
  93.             $this->addFlash('notice''Votre mot de passe a bien été modifié');
  94.             return $this->redirectToRoute('app_login');
  95.         }
  96.         return $this->render('reset_password/update.html.twig',[
  97.             'form' => $form->createView(),
  98.             'error' => NULL
  99.         ]);
  100.     }
  101. }