src/Controller/SecurityController.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\ResetPasswordWithEmailType;
  5. use App\Form\SecurityResetPasswordType;
  6. use App\Services\MailService;
  7. use App\Services\Security\MailSecurityService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use LogicException;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  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\Routing\Generator\UrlGeneratorInterface;
  17. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  18. class SecurityController extends AbstractController
  19. {
  20.     /**
  21.      * @Route("/login", name="app_login")
  22.      */
  23.     public function login(AuthenticationUtils $authenticationUtils): Response
  24.     {
  25.         // get the login error if there is one
  26.         $error $authenticationUtils->getLastAuthenticationError();
  27.         // last username entered by the user
  28.         $lastUsername $authenticationUtils->getLastUsername();
  29.         return $this->render('Security/login.html.twig', [
  30.             'last_username' => $lastUsername,
  31.             'error' => $error
  32.         ]);
  33.     }
  34.     /**
  35.      * @Route("/logout", name="app_logout")
  36.      */
  37.     public function logout()
  38.     {
  39.         throw new LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  40.     }
  41.     /**
  42.      * @Route("/demande-mot-de-passe-oublie", name="utilisateur_mdp_oublie",  methods={"GET", "POST"})
  43.      */
  44.     public function demandeUtilisateurMotDePasse(
  45.         Request                $request,
  46.         EntityManagerInterface $em,
  47.         MailService            $mailService,
  48.         MailSecurityService    $mailSecurityService
  49.     ): Response
  50.     {
  51.         $form $this->createForm(ResetPasswordWithEmailType::class);
  52.         $form->handleRequest($request);
  53.         if ($form->isSubmitted() && $form->isValid()) {
  54.             $email $form->get('email')->getData();
  55.             $user $em->getRepository(User::class)->findOneByUsernameOrEmail($email);
  56.             /** @var $user User */
  57.             if ($user) {
  58.                 $mailSecurityService->sendResettingEmailMessage($user);
  59.                 $mailService->addEmailUserReset($user);
  60.                 $em->persist($user);
  61.                 $em->flush();
  62.             }
  63.             return $this->redirectToRoute('utilisateur_mdp_email_sent', ['username' => $email]);
  64.         }
  65.         return $this->render('Security/Resetting/request.html.twig', [
  66.             'form' => $form->createView()
  67.         ]);
  68.     }
  69.     /**
  70.      * @Route("/demande-mot-de-passe-envoye", name="utilisateur_mdp_email_sent",  methods={"GET", "POST"})
  71.      */
  72.     public function demandeUtilisateurMdpEnvoie(Request $request): Response
  73.     {
  74.         $username $request->request->get('username');
  75.         return $this->render('Security/Resetting/checkEmail.html.twig', [
  76.             'email' => $username
  77.         ]);
  78.     }
  79.     /**
  80.      * @Route("/reinitialiser-mot-de-passe/{token}", name="reinitialiser_mdp",  methods={"GET", "POST"})
  81.      */
  82.     public function resetPasswordAction(
  83.         Request                     $request,
  84.         EntityManagerInterface      $entityManager,
  85.         UserPasswordHasherInterface $passwordHasher,
  86.                                     $token
  87.     )
  88.     {
  89.         $user $entityManager->getRepository(User::class)->findOneByResetToken($token);
  90.         if (null === $user) {
  91.             return new RedirectResponse($this->container->get('router')->generate('app_login'));
  92.         }
  93.         /** @var User $user */
  94.         $form $this->createForm(SecurityResetPasswordType::class);
  95.         $form->handleRequest($request);
  96.         if ($form->isSubmitted() && $form->isValid()) {
  97.             $passwordRepeat $form->get('passwordRepeat')->getData();
  98.             $user->setConfirmationToken(null);
  99.             $user->setPasswordRequestedAt(null);
  100.             $newEncodedPassword $passwordHasher->hashPassword($user$passwordRepeat);
  101.             $user->setPassword($newEncodedPassword);
  102.             $user->setUseNewPassword(true);
  103.             $entityManager->persist($user);
  104.             $entityManager->flush();
  105.             return $this->redirectToRoute('app_login');
  106.         }
  107.         return $this->render('Security/Resetting/reset.html.twig', [
  108.             'form' => $form->createView(),
  109.         ]);
  110.     }
  111. }