src/Controller/ResetPasswordController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use DateTime;
  4. use App\Service\Mailjet;
  5. use App\Entity\ResetPassword;
  6. use App\Form\Admin\ResetPasswordType;
  7. use App\Service\CheckRecaptcha;
  8. use App\Repository\UserRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use App\Repository\ResetPasswordRepository;
  11. use App\Service\StaticData;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  17. class ResetPasswordController extends AbstractController
  18. {
  19.     public function __construct(EntityManagerInterface $managerStaticData $statics)
  20.     {
  21.         $this->manager $manager;
  22.         $this->statics $statics->getStaticData();
  23.     }
  24.     /**
  25.      * @Route("/mot-de-passe-oublie", name="reset_password")
  26.      */
  27.     public function index(Request $requestUserRepository $userRepoCheckRecaptcha $recaptcha): Response
  28.     {
  29.         $page = ['title'=>'Mot de passe oublié'];
  30.         #   je check si l'utilisateur est déja connecté ?
  31.         if ($this->getUser()) {
  32.             $this->redirectToRoute('home');
  33.         }
  34.         #   je check si il email à été soumis pour la récupération de mot de passe
  35.         if ($request->get('email')) {
  36.             define('SITE_KEY','6Lf6ntcdAAAAAFIFOj0w_4Q3_q8fs-zXu7senO2n');
  37.             define('SECRETE_KEY','6Lf6ntcdAAAAAImt18bgJi8ajipSKwPYfIq3RQd3');
  38.             if ( $recaptcha->check($_POST['reset-recaptcha_response'], SECRETE_KEY) ){
  39.                 $user $userRepo->findOneByEmail($request->get('email'));
  40.                 if ($user) {
  41.                     #   1 : enregistrer un bdd la demande de reset password
  42.                     $reset_password = new ResetPassword();
  43.                     $reset_password
  44.                         ->setUser($user)
  45.                         ->setToken(uniqid("RP"))
  46.                         ->setCreatedAt(new DateTime());
  47.                     $this->manager->persist($reset_password);
  48.                     $this->manager->flush();
  49.                     #   2 : Envoi d'un mail à l'utilisateur
  50.                     $mailjet = new Mailjet();
  51.                     $mail_content $this->renderView('admin/components/mail/_reset_password.html.twig'compact('reset_password'));
  52.                     $mailjet->send("caurettemarc@gmail.com""gite-colombine.fr""maximeavril.dev@gmail.com""Administrateur"'Mot de passe oublié'$mail_contentfalsefalse3367969);
  53.                     $flashbag = [
  54.                         'label' => 'success',
  55.                         'title' => "Demande prise en compte",
  56.                         'message' => "Un mail vient de vous être envoyer pour la création de votre nouveau mot de passe !",
  57.                         'footer' => "Vérifiez vos spams"
  58.                     ];
  59.                     return $this->render('admin/components/flash/reset_password.html.twig', [
  60.                         'data' => $reset_password,
  61.                         'flashbag' => $flashbag
  62.                     ]);
  63.                 }else {
  64.                     $flashbag = [
  65.                         'label' => 'warning',
  66.                         'title' => "Erreur...",
  67.                         'message' => "Oups... il semblerait que l'email saisi ne soit pas valide.",
  68.                         'footer' => "Assurez vous bien de mettre l'email d'un compte existant..."
  69.                     ];
  70.                     return $this->render('admin/components/flash/reset_password.html.twig', [
  71.                         'data' => null,
  72.                         'flashbag' => $flashbag
  73.                     ]);
  74.                 }
  75.             }else {
  76.                 $flashbag = [
  77.                     'label' => 'warning',
  78.                     'title' => "Erreur...",
  79.                     'message' => "Oups... il semblerait que Google ReCaptcha(bloqueur de spam) ait bloqué l'envoi...",
  80.                     'footer' => "Merci de recommencer l'opération."
  81.                 ];
  82.                 return $this->render('admin/components/flash/reset_password.html.twig', [
  83.                     'data' => null,
  84.                     'flashbag' => $flashbag
  85.                 ]);
  86.             }
  87.         }
  88.         return $this->render('admin/reset_password/index.html.twig', [
  89.             'statics' => $this->statics['data'],
  90.             'page' => $page,
  91.             'page_title' => '<img class="mt-5 mb-3" src="/images/about/logo-admin-dark-h.png">',
  92.         ]);
  93.     }
  94.     /**
  95.      * @Route("/modifier-mot-de-passe/{token}", name="update_password")
  96.      */
  97.     public function update($tokenRequest $request ,ResetPasswordRepository $resetPasswordRepoUserPasswordHasherInterface $encoderCheckRecaptcha $recaptcha)
  98.     {
  99.         $page = ['title'=>'Nouveau mot de passe'];
  100.         #   je recupère l'action liée a l'utilisateur
  101.         $reset_password $resetPasswordRepo->findOneByToken($token);
  102.         #   je verifie que la demande exist
  103.         if(!$reset_password){
  104.             return $this->redirectToRoute('reset_password', [
  105.                 'error' => "Un problème est servenu... Merci de recommencer l'opération."
  106.             ]);
  107.         }
  108.         #   je verifie que la demande est toujours valide (now + 1h)
  109.         $now = new DateTime();
  110.         if ($now $reset_password->getCreatedAt()->modify('+ 1 hour')) {
  111.             $this->addFlash(
  112.                 'warning',
  113.                 "Votre demande de mot de passe a expiré, veuillez la renouveller."
  114.             );
  115.             return $this->redirectToRoute('reset_password');
  116.         }
  117.         #   Rendre une vue avec mot de passe 
  118.         $form $this->createForm(ResetPasswordType::class);
  119.         $form->handleRequest($request);
  120.         #   si le form est valid et soumis
  121.         if ($form->isSubmitted() && $form->isValid()) {
  122.             define('SITE_KEY','6Lf6ntcdAAAAAFIFOj0w_4Q3_q8fs-zXu7senO2n');
  123.             define('SECRETE_KEY','6Lf6ntcdAAAAAImt18bgJi8ajipSKwPYfIq3RQd3');
  124.             if ( $recaptcha->check($_POST['update-recaptcha_response'], SECRETE_KEY) ){
  125.                 #   je recupère le password
  126.                 $new_pwd $form->get('new_password')->getData();
  127.                 //je l'encode
  128.                 $password_encoded $encoder->hashPassword($reset_password->getUser(), $new_pwd);
  129.                 $reset_password->getUser()->setPassword($password_encoded);
  130.                 #   je flush les données
  131.                 $this->manager->flush();
  132.                 #   envoi du mail de confirmation
  133.                 $mailjet = new Mailjet();
  134.                 $mail_content $this->renderView('admin/components/mail/_update_password.html.twig'compact('reset_password'));
  135.                 $mailjet->send("caurettemarc@gmail.com""gite-colombine.fr""maximeavril.dev@gmail.com""Administrateur"'Mot de passe modifié !'falsefalse$mail_content3367969);
  136.                 #   je notifie l'utilisateur Ajax
  137.                 $flashbag = [
  138.                     'label' => 'success',
  139.                     'title' => "Modifier avec succes",
  140.                     'message' => "Un mail de confirmation vient de vous être envoyer.",
  141.                     'footer' => "Vous pouvez maintenant vous connecter !",
  142.                     'link' => "Je me connecte !"
  143.                 ];
  144.                 return $this->render('admin/components/flash/update_password.html.twig', [
  145.                     'data' => $reset_password,
  146.                     'flashbag' => $flashbag
  147.                 ]);
  148.             }else {
  149.                 $flashbag = [
  150.                     'label' => 'warning',
  151.                     'title' => "Erreur...",
  152.                     'message' => "Oups... il semblerait que Google ReCaptcha(bloqueur de spam) ait bloqué l'envoi...",
  153.                     'footer' => "Merci de recommencer l'opération.",
  154.                     'link' => "Recommencer"
  155.                 ];
  156.                 return $this->render('admin/components/flash/update_password.html.twig', [
  157.                     'data' => null,
  158.                     'flashbag' => $flashbag
  159.                 ]);
  160.             }
  161.         }
  162.         return $this->render('admin/reset_password/update.html.twig',[
  163.             'form' => $form->createView(),
  164.             'page' => $page
  165.         ]);
  166.     }
  167. }