<?php
namespace App\Controller;
use App\Classe\MailBrevo;
use App\Classe\Mail;
use App\Entity\ResetPassword;
use App\Entity\User;
use App\Form\ResetPasswordType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class ResetPasswordController extends AbstractController
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @Route("/mot-de-passe-oublie", name="reset_password")
*/
public function index(Request $request): Response
{
//si le user est deja connu, on le redirige
if ($this->getUser()) {
return $this->redirectToRoute('app_login');
}
// get le mail
if ($request->get('email')) {
$user = $this->entityManager->getRepository(User::class)->findOneByEmail($request->get('email'));
if ($user) {
//enregistre en db la demande de changement de mot de passe
$reset_password = new ResetPassword();
$reset_password->setUser($user);
$reset_password->setToken(uniqid());
$reset_password->setCreatedAt(new \DateTime());
$this->entityManager->persist($reset_password);
$this->entityManager->flush();
$url = $this->generateUrl('update_password', [
'token' => $reset_password->getToken()
]);
$content = "
<p>Bonjour ".$user->getPrenom()." ".$user->getNom().",</p>
<p>Vous avez fait une demande pour réinitialiser votre mot de passe.</p>
<p>
Le lien suivant vous permettra d'effectuer cette démarche.<br>
<a href='https://passeurs-images.normandieimages.fr$url'>https://passeurs-images.normandieimages.fr$url</a>
</p>
<p style='margin-top: 10px'>
Bien cordialement,<br>
Normandie Images<br>
Pôle régional d'éducation aux images
</p>" ;
$mail = new MailBrevo();
$result = $mail->send("stephanehortet@normandieimages.fr","Stéphane HORTET",$user->getEmail(),$user->getPrenom().' '.$user->getNom(),'Réinitialiser votre mot de passe',$content);
//$this->addFlash('succes', $result );
$this->addFlash('succes', "Un mail pour réinitialiser votre mot de passe vous a été envoyé." );
}else{
$this->addFlash('echec', "Désolé, nous n'avons trouvé aucun compte existant avec cette adresse." );
}
}
return $this->render('reset_password/index.html.twig', [
'navbar_active' => 'etablissement',
'error' => NULL
]);
}
/**
* @Route("/modifier-mon-mot-de-passe/{token}", name="update_password")
*/
public function update(Request $request, $token, UserPasswordEncoderInterface $encoder): Response
{
$reset_password = $this->entityManager->getRepository(ResetPassword::class)->findOneByToken($token);
if (!$reset_password){
return $this->redirectToRoute('reset_password');
}
// on donne un delai de 3h pour modifier le mdp avec le mail
$now = new \DateTime();
if ($now > $reset_password->getCreatedAt()->modify('+ 3 hour')){
//le temps est expiré
$this->addFlash('notice', "Votre demande de mot de passe a expiré. Merci de la renouveller." );
return $this->redirectToRoute('reset_password');
}
$form = $this->createForm(ResetPasswordType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$new_pwd = $form->get('new_password')->getData();
$password = $encoder->encodePassword($reset_password->getUser(), $new_pwd);
$reset_password->getUser()->setPassword($password);
$this->entityManager->persist($reset_password);
$this->entityManager->flush();
$this->addFlash('notice', 'Votre mot de passe a bien été modifié');
return $this->redirectToRoute('app_login');
}
return $this->render('reset_password/update.html.twig',[
'form' => $form->createView(),
'error' => NULL
]);
}
}