<?php
namespace App\Controller\Front;
use App\Entity\PasswordReset;
use App\Form\Type\Front\PasswordResetRequestType;
use App\Form\Type\Front\PasswordResetType;
use App\Service\Front\PasswordReset\PasswordChangeHandlerInterface;
use App\Service\Front\PasswordReset\RequestHandlerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class PasswordResetController extends AbstractController
{
/**
* @Route("/password_reset", name="password_reset")
*/
public function index(Request $request, RequestHandlerInterface $handler): Response
{
$form = $this->createForm(PasswordResetRequestType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$handler->handle($form->get('username')->getData());
return $this->redirectToRoute('password_reset_mail_send');
}
return $this->render('front/password_reset/index.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/password_reset/send", name="password_reset_mail_send")
*/
public function send(): Response
{
return $this->render('front/password_reset/send.html.twig', [
]);
}
/**
* @Route("/password_reset/reset/{id}", name="password_reset_reset")
*/
public function reset(PasswordReset $passwordReset, Request $request, PasswordChangeHandlerInterface $handler): Response
{
if (!$this->isGranted('PASSWORD_RESET_NOT_EXPIRED', $passwordReset)) {
return $this->render('front/password_reset/expired.html.twig');
}
$form = $this->createForm(PasswordResetType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$handler->handle($passwordReset, $form->get('plain_password')->getData());
return $this->redirectToRoute('password_reset_complete');
}
return $this->render('front/password_reset/reset.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/password_reset/complete", name="password_reset_complete")
*/
public function complete(): Response
{
return $this->render('front/password_reset/complete.html.twig', [
]);
}
}