src/Controller/ResetPasswordController.php line 87

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-creation", name="create_password")
  23.      */
  24.     public function create(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 de création de mot de passe.</p>
  47.                     <p>
  48.                         Le lien suivant vous permettra d'effectuer cette démarche.<br>
  49.                         <a href='https://politique-tarifaire.normandieimages.net$url'>https://passeurs-images.normandieimages.net$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(),'Création de mot de passe',$content);
  58.                 //$this->addFlash('succes', $result );
  59.                 $this->addFlash('succes'"Un mail pour créer 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/createpwd.html.twig', [
  65.             'navbar_active' => 'etablissement',
  66.             'error' => NULL
  67.         ]);
  68.     }
  69.     /**
  70.      * @Route("/mot-de-passe-oublie", name="reset_password")
  71.      */
  72.     public function index(Request $request): Response
  73.     {
  74.         //si le user est deja connu, on le redirige
  75.         if ($this->getUser()) {
  76.             return $this->redirectToRoute('app_login');
  77.         }
  78.         // get le mail
  79.         if ($request->get('email')) {
  80.             $user $this->entityManager->getRepository(User::class)->findOneByEmail($request->get('email'));
  81.             if ($user) {
  82.                 //enregistre en db la demande de changement de mot de passe
  83.                 $reset_password = new ResetPassword();
  84.                 $reset_password->setUser($user);
  85.                 $reset_password->setToken(uniqid());
  86.                 $reset_password->setCreatedAt(new \DateTime());
  87.                 $this->entityManager->persist($reset_password);
  88.                 $this->entityManager->flush();
  89.                 $url $this->generateUrl('update_password', [
  90.                     'token' => $reset_password->getToken()
  91.                 ]);
  92.                 $content "
  93.                     <p>Bonjour ".$user->getPrenom()." ".$user->getNom().",</p>
  94.                     <p>Vous avez fait une demande pour réinitialiser votre mot de passe.</p>
  95.                     <p>
  96.                         Le lien suivant vous permettra d'effectuer cette démarche.<br>
  97.                         <a href='https://politique-tarifaire.normandieimages.net$url'>https://passeurs-images.normandieimages.net$url</a>
  98.                     </p>
  99.                     <p style='margin-top: 10px'>
  100.                         Bien cordialement,<br>
  101.                         Normandie Images<br>
  102.                         Pôle régional d'éducation aux images
  103.                     </p>" ;
  104.                 $mail = new MailBrevo();
  105.                 $result $mail->send("stephanehortet@normandieimages.fr","Stéphane HORTET",$user->getEmail(),$user->getPrenom().' '.$user->getNom(),'Réinitialiser votre mot de passe',$content);
  106.                 //$this->addFlash('succes', $result );
  107.                 $this->addFlash('succes'"Un mail pour réinitialiser votre mot de passe vous a été envoyé." );
  108.             }else{
  109.                 $this->addFlash('echec'"Désolé, nous n'avons trouvé aucun compte existant avec cette adresse." );
  110.             }
  111.         }
  112.         return $this->render('reset_password/index.html.twig', [
  113.             'navbar_active' => 'etablissement',
  114.             'error' => NULL
  115.         ]);
  116.     }
  117.     /**
  118.      * @Route("/modifier-mon-mot-de-passe/{token}", name="update_password")
  119.      */
  120.     public function update(Request $request$tokenUserPasswordEncoderInterface $encoder): Response
  121.     {
  122.         $reset_password $this->entityManager->getRepository(ResetPassword::class)->findOneByToken($token);
  123.         if (!$reset_password){
  124.             return $this->redirectToRoute('reset_password');
  125.         }
  126.         // on donne un delai de 3h pour modifier le mdp avec le mail
  127.         $now = new  \DateTime();
  128.         if ($now $reset_password->getCreatedAt()->modify('+ 3 hour')){
  129.             //le temps est expiré
  130.             $this->addFlash('notice'"Votre demande de mot de passe a expiré. Merci de la renouveller." );
  131.             return $this->redirectToRoute('reset_password');
  132.         }
  133.         $form $this->createForm(ResetPasswordType::class);
  134.         $form->handleRequest($request);
  135.         if ($form->isSubmitted() && $form->isValid()){
  136.             $new_pwd $form->get('new_password')->getData();
  137.             $password $encoder->encodePassword($reset_password->getUser(), $new_pwd);
  138.             $reset_password->getUser()->setPassword($password);
  139.             $this->entityManager->persist($reset_password);
  140.             $this->entityManager->flush();
  141.             $this->addFlash('notice''Votre mot de passe a bien été modifié');
  142.             return $this->redirectToRoute('app_login');
  143.         }
  144.         return $this->render('reset_password/update.html.twig',[
  145.             'form' => $form->createView(),
  146.             'error' => NULL
  147.         ]);
  148.     }
  149. }