src/Controller/SecurityController.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use DateTime;
  4. use App\Entity\User;
  5. use App\Form\ForgetPassType;
  6. use App\Form\UpdatePassType;
  7. use App\Service\EmailService;
  8. use App\Repository\UserRepository;
  9. use App\Service\UpdatePasswordService;
  10. use App\Repository\UpdatePasswordRepository;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  17. class SecurityController extends AbstractController
  18. {
  19.     #[Route(path'/login'name'app_login')]
  20.     public function login(AuthenticationUtils $authenticationUtils): Response
  21.     {
  22.         // if ($this->getUser()) {
  23.         //     return $this->redirectToRoute('target_path');
  24.         // }
  25.         $error $authenticationUtils->getLastAuthenticationError();
  26.         $lastUsername $authenticationUtils->getLastUsername();
  27.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  28.     }
  29.     #[Route(path'/logout'name'app_logout')]
  30.     public function logout(): void
  31.     {
  32.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  33.     }
  34.     /**
  35.      * Route permettant de faire une demande de mot de passe oublié. Envoi un email à l'adresse inscrit par l'utilisateur
  36.      *
  37.      * @param Request $request instance de l'objet Request
  38.      * @param UserRepository $userRepository instance du repository lié à l'entité User
  39.      * @param UpdatePasswordService $updatePasswordService instance du service lié à l'entité UpdatePassword
  40.      * @param EmailService $emailService instance du service lié aux emails
  41.      * @return Response
  42.      */
  43.     #[Route(path:"/login/forget"name:"pass_forget")]
  44.     public function forgetPass(
  45.         Request $request,
  46.         UserRepository $userRepository,
  47.         UpdatePasswordService $updatePasswordService,
  48.         EmailService $emailService
  49.     ): Response {
  50.         $form $this->createForm(ForgetPassType::class);
  51.         $form->handleRequest($request);
  52.         if ($form->isSubmitted() && $form->isValid()) {
  53.             $userfinded $userRepository->findOneBy(["email" => $form->get("email")->getData() ]);
  54.             if(!$userfinded) {
  55.                 return $this->render('security/pass_forget.html.twig', [
  56.                     'form' => $form->createView(),
  57.                     'error' => "L'adresse mail " $form->get("email")->getData() . " ne correspond à aucun utilisateur",
  58.                     'submited' => true
  59.                 ]);
  60.             }
  61.             $token $updatePasswordService->askChangePassword($userfinded);
  62.             $emailService->sendPasswordMail($token$form->get("email")->getData());
  63.         }
  64.         return $this->render('security/pass_forget.html.twig', [
  65.             'form' => $form->createView(),
  66.             'error' => null,
  67.             'submited' => $form->isSubmitted() && $form->isValid()
  68.         ]);
  69.     }
  70.     /**
  71.      * Route permettant à l'utilisateur d'entrer un nouveau mot de passe
  72.      *
  73.      * @param string $token Token généré lors de la demande de mot de passe oublié
  74.      * @param Request $request instance de l'objet Request
  75.      * @param UpdatePasswordRepository $updatePasswordRepository instance du repository lié à l'entité UpdatePassword
  76.      * @param UpdatePasswordService $updatePasswordService instance du service lié à l'entité UpdatePassword
  77.      * @return Response
  78.      */
  79.     #[Route(path:"/pass-change/{token}"name:"pass_change")]
  80.     public function passChange(
  81.         string $token,
  82.         Request $request,
  83.         UpdatePasswordRepository $updatePasswordRepository,
  84.         UpdatePasswordService $updatePasswordService,
  85.         EntityManagerInterface $em,
  86.     ): Response {
  87.         $success false;
  88.         $form $this->createForm(UpdatePassType::class);
  89.         $ask $updatePasswordRepository->findOneBy(["token" => $token]);
  90.         $isExpired =($ask) ? $ask->getExpiration() < new DateTime() : true;
  91.         if (!$isExpired) {
  92.             $info $updatePasswordService->onPassFormSend($form$request$ask);
  93.         }
  94.         if (!$isExpired && $info === true) {
  95.             $info null;
  96.             $success true;
  97.         }
  98.         return $this->render('security/pass_change.html.twig', [
  99.             'form' => $form->createView(),
  100.             'isExpired' => $isExpired,
  101.             'error' =>  $info ?? null,
  102.             'success' => $success ?? null
  103.         ]);
  104.     }
  105.     #[Route(path:'/regenerate/token/{id}'name:"regenerate_pass_token")]
  106.     public function regeneratePassToken(User $userUpdatePasswordService $updatePasswordServiceEmailService $emailService)
  107.     {
  108.         if($this->isGranted('ROLE_ADMIN'$user)) {
  109.             $token $updatePasswordService->askChangePassword($user);
  110.             $emailService->sendAccountCreated($token$user->getEmail());
  111.         }
  112.         return $this->redirect($this->generateUrl('app_user_crud_index'));
  113.     }
  114. }