<?php
namespace App\Controller\Client;
use App\Entity\AdminEntity\Users;
use App\EventListener\UserEvent;
use DateInterval;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use Exception;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
class ResetPasswordController extends AbstractController
{
/**
* @Route("/resetPassword", name="resetPassword")
*/
public function resetPassword(
Request $request,
ManagerRegistry $doctrine,
EventDispatcherInterface $eventDispatcher,
UserPasswordHasherInterface $hasher,
EntityManagerInterface $manager,
)
{
$email =$request->request->get('email');
$error =false;
$sucess =false;
if($email){
$user =$doctrine->getRepository(Users::class)->findOneBy(array('email' => $email));
if($user){
//Génération d'un token unique liee à l'utilisateur entregistré
$token = hash_hmac('sha256', bin2hex(random_bytes(16)), $user->getEmail());
//Création de la date de validité du token (48h)
$dateNow = new DateTime('now');
$dateValToken = $dateNow->add(new DateInterval('PT1H'));
//Encodage du mot de passe reçu en claire par le formulaire de creation de l'utilisateur
$hashed = $hasher->hashPassword($user, uniqid($user->getNom()));
$user
->setPassword($hashed)
->setToken($token)
->setValidity($dateValToken);
try {
$manager->persist($user);
$manager->flush();
} catch (Exception $e) {
throw new Exception("Error de réinitialisation mot de passe : " . $e->getMessage());
}
$event = new UserEvent($user, 'no-reply@gest-it.fr');
$eventDispatcher->dispatch($event);
$sucess = true;
}else{
$error = true;
}
}
return $this->render('security/resetPassword.html.twig', [
'error'=> $error,
'success'=> $sucess,
]);
}
}