src/Controller/ResetPasswordController.php line 28
<?php
namespace App\Controller;
use App\Entity\ResetPassword;
use App\Entity\User;
use App\Form\ResetPasswordType;
use App\Service\MailService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
class ResetPasswordController extends AbstractController
{
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
#[Route('/reset/password', name: 'app_reset_password')]
public function index(Request $request, MailService $mailService): Response
{
if ($this->getUser()) {
return $this->redirectToRoute('app_main');
}
if ($username = $request->request->get('username')) {
$domaine = $request->server->get('HTTP_HOST');
$user = $this->em->getRepository(User::class)->findOneBy(['username' => $username]);
if ($user) {
$resetPassword = new ResetPassword();
$resetPassword->setUser($user);
$resetPassword->setToken(uniqid('lm' . $user->getId(), '45') . '-' . uniqid());
$resetPassword->setCreatedAt(new \DateTime());
$this->em->persist($resetPassword);
$this->em->flush();
$subject = 'Réinitialiser votre mot de passe';
$fullName = $user->getFirstname() . ' ' . $user->getlastname();
$url = $this->generateUrl('reset_new_password', ['token' => $resetPassword->getToken()]);
$test = $mailService->sendMail($user->getEmail(), $subject, $this->renderView('registration/mail_reset_password.html.twig', @compact('user', 'fullName', 'url', 'domaine')));
$this->addFlash('notice', 'Un email vous a été envoyé pour changer de mot de passe.');
} else {
$this->addFlash('error', 'Email not found !');
}
}
return $this->render('reset_password/first_step.html.twig', []);
}
#[Route('/reset/new-password/{token}', name: 'reset_new_password')]
public function restPassword($token, Request $request, UserPasswordHasherInterface $userPasswordHasher)
{
if ($this->getUser()) {
return $this->redirectToRoute('app_main');
}
$tokenData = $this->em->getRepository(ResetPassword::class)->findOneByToken($token);
if (!$tokenData) {
$this->addFlash('error', 'Token not found !');
return $this->redirectToRoute('app_reset_password');
}
$now = new \DateTime();
if ($now > $tokenData->getCreatedAt()->modify('+1 hour')) {
$this->addFlash('error', 'This request to change password has expired');
return $this->redirectToRoute('app_reset_password');
}
$form = $this->createForm(ResetPasswordType::class);
$form->remove('submit');
$form->handleRequest($request);
if ($form->isSubmitted() and $form->isValid()) {
$user = $tokenData->getUser();
$password = $form->get('password')->getData();
$newPassword = $userPasswordHasher->hashPassword($user, $password);
$user->setPassword($newPassword);
$this->em->flush();
$this->addFlash('notice', 'Your password has updated successful');
return $this->redirectToRoute('app_login');
}
return $this->render('reset_password/second_step.html.twig', array('form' => $form->createView()));
}
}