src/Controller/UserAuthenticatorController.php line 29

  1. <?php
  2. namespace App\Controller;
  3. use App\Email\LostMyPasswordEmail;
  4. use App\Entity\UserEmail;
  5. use App\Entity\ResetPassword;
  6. use App\Entity\User;
  7. use App\Form\UserEmailType;
  8. use App\Form\ResetPasswordType;
  9. use App\Repository\UserRepository;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\RedirectResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  17. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  18. class UserAuthenticatorController extends BaseController
  19. {
  20.     public function __construct(
  21.         private UserRepository $userRepository,
  22.         private LostMyPasswordEmail $lostMyPasswordEmail
  23.     ) {}
  24.     #[Route(path'/'name'app_index')]
  25.     public function index()
  26.     {
  27.         return new RedirectResponse('/login');
  28.     }
  29.     #[Route('/oquncskjhaijqwlkca/{id}'name'app_auto_login'methods: ['GET'])]
  30.     public function autoLogin(User $user)
  31.     {
  32.         if (!$user) {
  33.             throw $this->createNotFoundException('Utilisateur non trouvĂ©');
  34.         }
  35.         $token = new UsernamePasswordToken($user'main'$user->getRoles());
  36.         $this->container->get('security.token_storage')->setToken($token);
  37.         return $this->redirectToRoute('app_dashboard');
  38.     }
  39.     #[Route(path'/login'name'app_login')]
  40.     public function login(AuthenticationUtils $authenticationUtils): Response
  41.     {
  42.         if ($this->getUser()) {
  43.             $user $this->getUser();
  44.             if (!$this->isGranted('ROLE_SUPER_ADMIN') && $user->getEndValidityDate() && $user->getEndValidityDate() < (new \DateTime())->sub(new \DateInterval('P1D'))) {
  45.                 $lastUsername $authenticationUtils->getLastUsername();
  46.                 $this->lostMyPasswordEmail->sendAccountExpired($user);
  47.                 return $this->render('security/login.html.twig', ['last_username' => $lastUsername'expire' => true]);
  48.             }
  49.             /** @legacy */
  50.             // if ($this->isGranted('ROLE_USER') || $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_SUPER_ADMIN')) {
  51.             //     return $this->redirectToRoute('app_dashboard');
  52.             // }
  53.             return $this->redirectToRoute('app_dashboard');
  54.         }
  55.         // get the login error if there is one
  56.         $error $authenticationUtils->getLastAuthenticationError();
  57.         if ($error) {
  58.             $error $error->getMessage();
  59.         }
  60.         // last username entered by the user
  61.         $lastUsername $authenticationUtils->getLastUsername();
  62.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  63.     }
  64.     #[Route(path'/lost-my-password'name'app_lost_my_password')]
  65.     public function lostMyPassword(Request $request): Response
  66.     {
  67.         if ($this->getUser()) {
  68.             return $this->redirectToRoute('app_dashboard');
  69.         }
  70.         $lostMyPassword = new UserEmail();
  71.         $form $this->createForm(UserEmailType::class, $lostMyPassword);
  72.         $form->handleRequest($request);
  73.         $showMessage false;
  74.         if ($form->isSubmitted() && $form->isValid()) {
  75.             $user $this->userRepository->findOneBy(['email' => $form->get('email')->getData()]);
  76.             if ($user) {
  77.                 $user->setResetToken(md5(time() + rand()));
  78.                 $this->userRepository->save($usertrue);
  79.                 $this->lostMyPasswordEmail->send($user);
  80.             }
  81.             $showMessage true;
  82.         }
  83.         return $this->render('security/lost-my-password.html.twig', [
  84.             'showMessage' => $showMessage,
  85.             'form' => $form,
  86.         ]);
  87.     }
  88.     #[Route(path"/get-reset-password/azedazzcsdksjlgfha/{id}"env'dev')]
  89.     public function setResetPassword(Request $requestUserRepository $userRepository)
  90.     {
  91.         $user $userRepository->findOneById($request->get('id'));
  92.         if ($user) {
  93.             $url $user->getResetToken() ? "https://appli.preprod.neocognition.ai/reset-password/" $user->getResetToken() : null;
  94.             return new JsonResponse(["redirect" => $url]);
  95.         }
  96.         return new JsonResponse(["redirect" => null]);
  97.     }
  98.     #[Route(path'/reset-password/{resetToken}'name'app_reset_password')]
  99.     public function resetPassword(Request $requeststring $resetTokenAuthenticationUtils $authenticationUtilsUserPasswordHasherInterface $passwordHasher): Response
  100.     {
  101.         if (!$resetToken || $resetToken == '') {
  102.             return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  103.         }
  104.         $user $this->userRepository->findOneBy(['resetToken' => $resetToken]);
  105.         if (!$user) {
  106.             return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
  107.         }
  108.         $showMessage false;
  109.         $resetPassword = new ResetPassword();
  110.         $form $this->createForm(ResetPasswordType::class, $resetPassword);
  111.         $form->handleRequest($request);
  112.         if ($form->isSubmitted() && $form->isValid()) {
  113.             $user->setPassword(
  114.                 $passwordHasher->hashPassword(
  115.                     $user,
  116.                     $form->get('plainPassword')->getData()
  117.                 )
  118.             );
  119.             $user->setResetToken(null);
  120.             $this->userRepository->save($usertrue);
  121.             $showMessage true;
  122.         }
  123.         return $this->render('security/reset-password.html.twig', [
  124.             'showMessage' => $showMessage,
  125.             'form' => $form,
  126.         ]);
  127.     }
  128.     #[Route(path'/logout'name'app_logout')]
  129.     public function logout(): void
  130.     {
  131.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  132.     }
  133. }