src/Controller/SecurityController.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Repository\UserPlatformRepository;
  4. use App\Service\MailService;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  12. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  13. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  14. class SecurityController extends AbstractController
  15. {
  16.     /**
  17.      * @Route("/login/{type}", name="app_login")
  18.      */
  19.     public function login(AuthenticationUtils $authenticationUtilsstring $type null): Response
  20.     {
  21.         // if ($this->getUser()) {
  22.         //     return $this->redirectToRoute('target_path');
  23.         // }
  24.         // get the login error if there is one
  25.         $error $authenticationUtils->getLastAuthenticationError();
  26.         // last username entered by the user
  27.         $lastUsername $authenticationUtils->getLastUsername();
  28.         if ($type == "admin") {
  29.             return $this->render('backView/security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  30.         } else {
  31.             return $this->render('frontView/security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  32.         }
  33.     }
  34.     /**
  35.      * @Route("/logout", name="app_logout")
  36.      */
  37.     public function logout(): void
  38.     {
  39.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  40.     }
  41.     #[Route('/forgot-password'name'app_forgot_password')]
  42.     public function forgotPassword(Request $requestUserPlatformRepository $userRepositoryMailService $mailServiceEntityManagerInterface $emSessionInterface $session): Response
  43.     {
  44.         if ($request->isMethod('POST')) {
  45.             $email $request->request->get('email');
  46.             $user $userRepository->findOneBy(['email' => $email]);
  47.             if ($user) {
  48.                 // Génère un token unique pour la réinitialisation
  49.                 $resetToken bin2hex(random_bytes(32));
  50.                 $user->setResetToken($resetToken);
  51.                 $user->setTokenExpiration(new \DateTime('+1 hour')); // Le token expire dans 1 heure
  52.                 // Save the user with EntityManager
  53.                 $em->persist($user);
  54.                 $em->flush();
  55.                 // Envoie l'e-mail de réinitialisation
  56.                 $resetUrl $this->generateUrl('app_reset_password', ['token' => $resetToken], UrlGeneratorInterface::ABSOLUTE_URL);
  57.                 $mailService->sendEmail(
  58.                     ['to' => $email],
  59.                     'Réinitialisation de votre mot de passe',
  60.                     'frontView/security/emails_forgot_password.html.twig',
  61.                     ['resetUrl' => $resetUrl]
  62.                 );
  63.                 $this->addFlash('success''Un e-mail de réinitialisation a été envoyé à ' $email);
  64.             } else {
  65.                 $this->addFlash('error''Aucun utilisateur trouvé pour cet e-mail.');
  66.             }
  67.         }
  68.         return $this->render('frontView/security/forgotMdp.html.twig', []);
  69.     }
  70.     #[Route('/reset-password/{token}'name'app_reset_password')]
  71.     public function resetPassword(string $tokenRequest $requestUserPlatformRepository $userRepositoryUserPasswordEncoderInterface $passwordEncoder,  SessionInterface $sessionEntityManagerInterface $em): Response
  72.     {
  73.         $user $userRepository->findOneBy(['resetToken' => $token]);
  74.         if (!$user || $user->getTokenExpiration() < new \DateTime()) {
  75.             $this->addFlash('error''Le lien de réinitialisation est invalide ou expiré.');
  76.             return $this->redirectToRoute('app_forgot_password');
  77.         }
  78.         if ($request->isMethod('POST')) {
  79.             if ($request->request->get('confirm-password') == $request->request->get('password')) {
  80.                 $newPassword $request->request->get('password');
  81.                 $user->setPassword($passwordEncoder->encodePassword($user$newPassword));
  82.                 $user->setResetToken(null); // Supprime le token pour plus de sécurité
  83.                 $user->setTokenExpiration(null);
  84.                 $em->persist($user);
  85.                 $em->flush();
  86.                 $this->addFlash('success''Votre mot de passe a été réinitialisé avec succès.');
  87.                 return $this->redirectToRoute('app_login');
  88.             } else {
  89.                 $this->addFlash('error''Mot de passe different.');
  90.                 return $this->redirectToRoute('app_reset_password', ['token' => $token]);
  91.             }
  92.         }
  93.         return $this->render('frontView/security/resetMdp.html.twig', [
  94.             'token' => $token
  95.         ]);
  96.     }
  97. }