src/Controller/Client/ResetPasswordController.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Client;
  3. use App\Entity\AdminEntity\Users;
  4. use App\EventListener\UserEvent;
  5. use DateInterval;
  6. use DateTime;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Exception;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. class ResetPasswordController extends AbstractController
  16. {
  17.     /**
  18.      * @Route("/resetPassword", name="resetPassword")
  19.      */
  20.     public function resetPassword(
  21.         Request $request,
  22.         ManagerRegistry $doctrine,
  23.         EventDispatcherInterface $eventDispatcher,
  24.         UserPasswordHasherInterface $hasher,
  25.         EntityManagerInterface $manager,
  26.         )
  27.     {
  28.        $email =$request->request->get('email');
  29.        $error =false;
  30.        $sucess =false;
  31.        if($email){
  32.         $user =$doctrine->getRepository(Users::class)->findOneBy(array('email' => $email));
  33.         if($user){
  34.              //Génération d'un token unique liee à l'utilisateur entregistré 
  35.              $token hash_hmac('sha256'bin2hex(random_bytes(16)), $user->getEmail());
  36.              //Création de la date de validité du token (48h)
  37.              $dateNow = new DateTime('now');
  38.              $dateValToken $dateNow->add(new DateInterval('PT1H'));
  39.             
  40.              //Encodage du mot de passe reçu en claire par le formulaire de creation de l'utilisateur
  41.              $hashed $hasher->hashPassword($useruniqid($user->getNom()));
  42.             
  43.              $user
  44.                  ->setPassword($hashed)
  45.                  ->setToken($token)
  46.                  ->setValidity($dateValToken);
  47.              try {
  48.                  $manager->persist($user);
  49.                  $manager->flush();
  50.              } catch (Exception $e) {
  51.                  throw new Exception("Error de réinitialisation mot de passe : " $e->getMessage());
  52.                  
  53.              }
  54.             $event = new UserEvent($user'no-reply@gest-it.fr');
  55.             $eventDispatcher->dispatch($event);
  56.             $sucess true;
  57.         }else{
  58.             $error true;
  59.         }
  60.        }
  61.         return $this->render('security/resetPassword.html.twig', [
  62.             'error'=> $error,
  63.             'success'=> $sucess,
  64.         ]);
  65.     }
  66. }