<?php
namespace App\Controller\Adherent;
use App\Entity\User;
use App\Form\Adherent\RequestPasswordResetType;
use App\Form\ResetPasswordType;
use App\Form\Security\LoginType;
use App\Service\ResetPasswordManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
#[Route(path: '/connexion', name: 'login')]
public function login(AuthenticationUtils $authenticationUtils, FormFactoryInterface $formFactory): Response
{
if ($this->getUser()) {
return $this->redirectToRoute('dashboard');
}
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
$data = ['email' => $lastUsername];
$form = $formFactory->createNamed('', LoginType::class, $data);
return $this->render('security/login.html.twig', ['error' => $error, 'form' => $form->createView()]);
}
#[Route(path: '/deconnexion', name: 'logout')]
public function logout(): void
{
throw new \LogicException(
'This method can be blank - it will be intercepted by the logout key on your firewall.'
);
}
#[Route(path: '/reinitialisation-mot-de-passe', name: 'request_reset_password')]
public function requestPasswordReset(Request $request, EntityManagerInterface $em, ResetPasswordManager $resetPasswordManager): Response
{
$form = $this->createForm(RequestPasswordResetType::class);
$form->handleRequest($request);
$email = null;
if ($form->isSubmitted() && $form->isValid()) {
$email = $form->get('email')->getData();
$user = $em->getRepository(User::class)->findOneBy(['email' => $email]);
if ($user) {
$resetPasswordManager->setResetToken($user);
$em->flush();
$resetPasswordManager->sendEmail($user);
}
}
return $this->render('security/request_password_reset.html.twig', [
'form' => $form->createView(),
'email' => $email,
]);
}
#[Route(path: '/reinitialisation-mot-de-passe/{token}', name: 'reset_password')]
public function resetPassword(Request $request, $token, EntityManagerInterface $em): Response
{
$user = $em->getRepository(User::class)->findOneBy(['resetToken' => $token]);
$done = false;
if (null === $user) {
return $this->redirectToRoute('request_reset_password');
}
$form = $this->createForm(ResetPasswordType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setResetToken(null);
$user->setIsTemporary(false);
$em->flush();
$done = true;
}
return $this->render('security/reset_password.html.twig', ['form' => $form->createView(), 'done' => $done]);
}
}