src/Controller/UserAuthenticatorController.php line 29
<?phpnamespace App\Controller;use App\Email\LostMyPasswordEmail;use App\Entity\UserEmail;use App\Entity\ResetPassword;use App\Entity\User;use App\Form\UserEmailType;use App\Form\ResetPasswordType;use App\Repository\UserRepository;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;class UserAuthenticatorController extends BaseController{public function __construct(private UserRepository $userRepository,private LostMyPasswordEmail $lostMyPasswordEmail) {}#[Route(path: '/', name: 'app_index')]public function index(){return new RedirectResponse('/login');}#[Route('/oquncskjhaijqwlkca/{id}', name: 'app_auto_login', methods: ['GET'])]public function autoLogin(User $user){if (!$user) {throw $this->createNotFoundException('Utilisateur non trouvé');}$token = new UsernamePasswordToken($user, 'main', $user->getRoles());$this->container->get('security.token_storage')->setToken($token);return $this->redirectToRoute('app_dashboard');}#[Route(path: '/login', name: 'app_login')]public function login(AuthenticationUtils $authenticationUtils): Response{if ($this->getUser()) {$user = $this->getUser();if (!$this->isGranted('ROLE_SUPER_ADMIN') && $user->getEndValidityDate() && $user->getEndValidityDate() < (new \DateTime())->sub(new \DateInterval('P1D'))) {$lastUsername = $authenticationUtils->getLastUsername();$this->lostMyPasswordEmail->sendAccountExpired($user);return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'expire' => true]);}/** @legacy */// if ($this->isGranted('ROLE_USER') || $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_SUPER_ADMIN')) {// return $this->redirectToRoute('app_dashboard');// }return $this->redirectToRoute('app_dashboard');}// get the login error if there is one$error = $authenticationUtils->getLastAuthenticationError();if ($error) {$error = $error->getMessage();}// last username entered by the user$lastUsername = $authenticationUtils->getLastUsername();return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);}#[Route(path: '/lost-my-password', name: 'app_lost_my_password')]public function lostMyPassword(Request $request): Response{if ($this->getUser()) {return $this->redirectToRoute('app_dashboard');}$lostMyPassword = new UserEmail();$form = $this->createForm(UserEmailType::class, $lostMyPassword);$form->handleRequest($request);$showMessage = false;if ($form->isSubmitted() && $form->isValid()) {$user = $this->userRepository->findOneBy(['email' => $form->get('email')->getData()]);if ($user) {$user->setResetToken(md5(time() + rand()));$this->userRepository->save($user, true);$this->lostMyPasswordEmail->send($user);}$showMessage = true;}return $this->render('security/lost-my-password.html.twig', ['showMessage' => $showMessage,'form' => $form,]);}#[Route(path: "/get-reset-password/azedazzcsdksjlgfha/{id}", env: 'dev')]public function setResetPassword(Request $request, UserRepository $userRepository){$user = $userRepository->findOneById($request->get('id'));if ($user) {$url = $user->getResetToken() ? "https://appli.preprod.neocognition.ai/reset-password/" . $user->getResetToken() : null;return new JsonResponse(["redirect" => $url]);}return new JsonResponse(["redirect" => null]);}#[Route(path: '/reset-password/{resetToken}', name: 'app_reset_password')]public function resetPassword(Request $request, string $resetToken, AuthenticationUtils $authenticationUtils, UserPasswordHasherInterface $passwordHasher): Response{if (!$resetToken || $resetToken == '') {return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);}$user = $this->userRepository->findOneBy(['resetToken' => $resetToken]);if (!$user) {return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);}$showMessage = false;$resetPassword = new ResetPassword();$form = $this->createForm(ResetPasswordType::class, $resetPassword);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$user->setPassword($passwordHasher->hashPassword($user,$form->get('plainPassword')->getData()));$user->setResetToken(null);$this->userRepository->save($user, true);$showMessage = true;}return $this->render('security/reset-password.html.twig', ['showMessage' => $showMessage,'form' => $form,]);}#[Route(path: '/logout', name: 'app_logout')]public function logout(): void{throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');}}