src/Controller/Auth/PasswordController.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Auth;
  3. use App\Services\Api\Auth\AuthService;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\Validator\Constraints\Length;
  9. use Symfony\Component\Validator\Validator\ValidatorInterface;
  10. use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
  11. use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
  12. use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
  13. use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  14. class PasswordController extends AbstractController
  15. {
  16.     private AuthService $authService;
  17.     /**
  18.      * @param AuthService $authService
  19.      */
  20.     public function __construct(AuthService $authService)
  21.     {
  22.         $this->authService $authService;
  23.     }
  24.     /**
  25.      * @throws TransportExceptionInterface
  26.      * @throws ServerExceptionInterface
  27.      * @throws RedirectionExceptionInterface
  28.      * @throws ClientExceptionInterface
  29.      */
  30.     #[Route('/reset_password'name'app_reset_password')]
  31.     public function reset(Request $request): RedirectResponse|\Symfony\Component\HttpFoundation\Response
  32.     {
  33.         if ($request->isMethod('POST')) {
  34.             // Récupère les informations d'identification de l'utilisateur depuis le formulaire de connexion
  35.             $email $request->request->get('email');
  36.             //verification si les champ ne sont pas vide
  37.             if (!$email) {
  38.                 $this->addFlash('danger'"l'adresse électronique n'est pas correct");
  39.                 return $this->redirectToRoute('app_login');
  40.             }
  41.             $response =  $this->authService->resetPassword([
  42.                 'email' => $email
  43.             ]);
  44.             if ($response->getStatusCode() == 200 || $response->getStatusCode() == 201) {
  45.             } else {
  46.                 // Authentification échouée
  47. //                $this->addFlash("danger", json_decode($response->getContent(false), true)['message']);
  48.                 $this->addFlash("danger""Une erreur s'est produite : cette adresse e-mail n'existe pas dans le système.");
  49.                 return $this->redirectToRoute('app_reset_password');
  50.             }
  51.             // Redirige l'utilisateur vers la page protégée
  52.             return $this->redirectToRoute('app_check_reset_password',[
  53.                 'email' => $email
  54.             ]);
  55.         }
  56.         return $this->render('frontend/reset_password/reset.html.twig', [
  57.         ]);
  58.     }
  59.     /**
  60.      * @throws RedirectionExceptionInterface
  61.      * @throws ClientExceptionInterface
  62.      * @throws TransportExceptionInterface
  63.      * @throws ServerExceptionInterface
  64.      */
  65.     #[Route('/check/reset_password/{email}'name'app_check_reset_password')]
  66.     public function checkPassword(Request $request$email){
  67.         if ($request->isMethod('POST')) {
  68.             // Récupère les informations d'identification de l'utilisateur depuis le formulaire de connexion
  69.             $code $request->request->get('code');
  70.             //verification si les champ ne sont pas vide
  71.             if (!$code) {
  72.                 $this->addFlash('danger'"Saisir le code");
  73.                 return $this->redirectToRoute('app_check_reset_password', [
  74.                     'email' => $email
  75.                 ]);
  76.             }
  77.             $response =  $this->authService->passwordRequestCheck([
  78.                 'email' => $email,
  79.                 'code' => $code
  80.             ]);
  81.             if ($response->getStatusCode() == 200 || $response->getStatusCode() == 201) {
  82.             } else {
  83.                 // Authentification échouée
  84.                 $this->addFlash("danger"json_decode($response->getContent(false), true)['message']);
  85.                 return $this->redirectToRoute('app_check_reset_password',[
  86.                     'email' => $email
  87.                 ]);
  88.             }
  89.             $data json_decode($response->getContent(), true);
  90.             // Redirige l'utilisateur vers la page protégée
  91.             return $this->redirectToRoute('app_update_password',[
  92.                 'token' => $data['token']
  93.             ]);
  94.         }
  95.         return $this->render('frontend/reset_password/check_email.html.twig', [
  96.             'email'=> $email
  97.         ]);
  98.     }
  99.     /**
  100.      * @throws RedirectionExceptionInterface
  101.      * @throws ClientExceptionInterface
  102.      * @throws TransportExceptionInterface
  103.      * @throws ServerExceptionInterface
  104.      */
  105.     #[Route('/check/update/password/{token}'name'app_update_password')]
  106.     public function updatePassword(Request $request$tokenValidatorInterface $validator){
  107.         if ($request->isMethod('POST')) {
  108.             $password $request->request->get('password');
  109.             //verification si les champ ne sont pas vide
  110.             if (!$password) {
  111.                 $this->addFlash('danger'"Mot de passe non valide");
  112.                 return $this->redirectToRoute('app_update_password',[
  113.                     'token' => $token
  114.                 ]);
  115.             }
  116.             // Vérifie si le mot de passe a une longueur minimale de 4 caractères
  117.             $errors $validator->validate($password, [
  118.                 new Length([
  119.                     'min' => 4,
  120.                     'minMessage' => 'Le mot de passe doit contenir au moins {{ limit }} caractères.',
  121.                 ]),
  122.             ]);
  123.             if (count($errors) > 0) {
  124.                 $this->addFlash('danger'$errors[0]->getMessage());
  125.                 return $this->redirectToRoute('app_update_password', [
  126.                     'token' => $token
  127.                 ]);
  128.             }
  129.             $response =  $this->authService->updatePassword([
  130.                 'password' => $password,
  131.                 'token' => $token,
  132.             ]);
  133.             if ($response->getStatusCode() == 200 || $response->getStatusCode() == 201 || $response->getStatusCode() == 202) {
  134.             } else {
  135.                 $this->addFlash("danger"json_decode($response->getContent(false), true)['message']);
  136.                 return $this->redirectToRoute('app_update_password',[
  137.                     'token' => $token
  138.                 ]);
  139.             }
  140.             $data json_decode($response->getContent(), true);
  141.             // Redirige l'utilisateur vers la page protégée
  142.             $this->addFlash('success''le mot de passe a été modifié avec succès.');
  143.             return $this->redirectToRoute('app_login',[
  144.             ]);
  145.         }
  146.         return $this->render('frontend/reset_password/update_password.html.twig', [
  147.             'token' => $token
  148.         ]);
  149.     }
  150. }