<?php
namespace App\Controller\Website;
use App\Entity\Token;
use App\Form\ForgotPasswordType;
use App\Repository\UserRepository;
use App\Service\MailerService;
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\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\String\ByteString;
class ForgotPasswordController extends AbstractController
{
#[Route('/mot-de-passe-oublie', name: 'password.forgot')]
public function __invoke(
Request $request, MailerService $mailerService, UserRepository $userRepository
): Response {
$form = $this->createForm(ForgotPasswordType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$email = $form->getData()['email'];
$user = $userRepository->findOneBy(['email' => $email]);
if ($user === null) {
$this->addFlash('success',
'Vous allez recevoir un mail contenant le lien pour réinitialiser votre mot de passe, si l\'adresse email renseignée existe dans notre base de données.'
);
return $this->render('forgot-password.html.twig', [
'form' => $form->createView(),
]);
}
$token = (new Token())
->setType(Token::RESET_PASSWORD)
->setValue(ByteString::fromRandom(32))
->setUser($user)
;
$entityManager->persist($token);
$entityManager->flush();
$this->addFlash('success',
'Vous allez recevoir un mail contenant le lien pour réinitialiser votre mot de passe, si l\'adresse email renseignée existe dans notre base de données.'
);
$emailTemplate = $this->renderView('emails/account/reset-password.mjml.twig', [
'url' => $this->generateUrl('password.reset', [
'token' => $token->getValue(),
], UrlGeneratorInterface::ABSOLUTE_URL),
]);
$mailerService->send($email, 'Réinitialisation de votre mot de passe', $emailTemplate);
return $this->render('forgot-password.html.twig', [
'form' => $form->createView(),
]);
}
return $this->render('forgot-password.html.twig', [
'form' => $form->createView(),
]);
}
}