src/Controller/ResetPasswordController.php line 28
<?phpnamespace 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()));}}