src\Controller\SecurityController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Admin\User;
  4. use App\Manager\Admin\UserManager;
  5. use App\Service\PasswordManager;
  6. use Doctrine\ORM\NonUniqueResultException;
  7. use Exception;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\RedirectResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  14. use Twig\Error\LoaderError;
  15. use Twig\Error\RuntimeError;
  16. use Twig\Error\SyntaxError;
  17. class SecurityController extends AbstractController
  18. {
  19.     /**
  20.      * @Route("/login", name="login")
  21.      */
  22.     public function login(AuthenticationUtils $authenticationUtils): Response
  23.     {
  24.         if ($this->getUser()) {
  25.             return $this->redirectToRoute('homepage');
  26.         }
  27.         // get the login error if there is one
  28.         $error = $authenticationUtils->getLastAuthenticationError();
  29.         // last username entered by the user
  30.         $lastUsername = $authenticationUtils->getLastUsername();
  31.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
  32.     }
  33.     /**
  34.      * @Route("/logout", name="logout")
  35.      */
  36.     public function logout(): Response
  37.     {
  38.         return new Response('Disconnected');
  39.     }
  40.     /**
  41.      * @Route("/password/reset", name="reset_password")
  42.      */
  43.     public function resetPassword(Request $request, UserManager $userManager): Response
  44.     {
  45.         $message = null;
  46.         $error = null;
  47.         $search = $request->get('search');
  48.         if ($search !== null) {
  49.             if ($userManager->resetPasswordForJazmin($search) === 1) {
  50.                 $message = 'Un e-mail vous a été envoyé avec les instructions pour récupérer votre mot de passe.';
  51.             } else {
  52.                 $error = 'Aucun compte ne semble associé à cette adresse e-mail ou à cet identifiant.';
  53.             }
  54.         }
  55.         return $this->render('security/reset_password.html.twig', [
  56.             'message' => $message,
  57.             'error' => $error,
  58.         ]);
  59.     }
  60.     /**
  61.      * @Route("/password/reset/{token}", name="reset_password_with_token")
  62.      */
  63.     public function passwordUpdateFromToken(Request $request, UserManager $userManager, string $token, PasswordManager $passwordManager): RedirectResponse|Response
  64.     {
  65.         $error = null;
  66.         $user = $userManager->checkResetTokenValidity($token);
  67.         if ($user === null) {
  68.             return $this->redirectToRoute('login', [
  69.                 'error' => 'Jeton invalide',
  70.             ]);
  71.         }
  72.         $errors = [];
  73.         $passwordFirst = $request->get('password_first');
  74.         $passwordSecond = $request->get('password_second');
  75.         if ($passwordFirst !== null && $passwordSecond !== $passwordFirst) {
  76.             $errors[] = 'Les deux nouveaux mots de passe ne correspondent pas !';
  77.         } elseif ($passwordFirst !== null) {
  78.             $check = $passwordManager->checkPassword($user, $passwordFirst);
  79.             if (is_array($check) && !$check instanceof User) {
  80.                 foreach ($check as $error) {
  81.                     $errors[] = $error;
  82.                 }
  83.             } else {
  84.                 $userManager->updatePassword($user, $passwordFirst);
  85.                 return $this->redirectToRoute('login', ['password' => 'updated']);
  86.             }
  87.         }
  88.         return $this->render('security/reset_form_password.html.twig', [
  89.             'errors' => $errors,
  90.         ]);
  91.     }
  92.     /**
  93.      * @Route("/password/init/{token}", name="init_password_with_token")
  94.      */
  95.     public function passwordInitFromToken(Request $request, UserManager $userManager, string $token): RedirectResponse|Response
  96.     {
  97.         $error = null;
  98.         $user = $userManager->checkInitTokenValidity($token);
  99.         if ($user === null) {
  100.             return $this->redirectToRoute('login', [
  101.                 'error' => 'Jeton invalide',
  102.             ]);
  103.         }
  104.         $passwordFirst = $request->get('password_first');
  105.         $passwordSecond = $request->get('password_second');
  106.         if ($passwordFirst !== null && $passwordSecond !== $passwordFirst) {
  107.             $error = 'Les mots de passe ne correspondent pas.';
  108.         } elseif ($passwordFirst !== null) {
  109.             $userManager->updatePassword($user, $passwordFirst);
  110.             return $this->redirectToRoute('login', ['password' => 'updated']);
  111.         }
  112.         return $this->render('security/init_password.html.twig', [
  113.             'error' => $error,
  114.         ]);
  115.     }
  116.     /**
  117.      * @Route("/account/show/{user}", name="account")
  118.      */
  119.     public function account(Request $request, User $user, UserManager $userManager): Response
  120.     {
  121.         $success = $request->get('success');
  122.         $errorArray = ($request->get('error_array') &&
  123.             $request->get('error_array') !== null) ?
  124.             $request->get('error_array') : null;
  125.         $user = $userManager->getRepository()->getUserForAccount($user);
  126.         return $this->render('security/index.html.twig', [
  127.             'user' => $user,
  128.             'success' => $success,
  129.             'error_array' => $errorArray,
  130.         ]);
  131.     }
  132.     /**
  133.      * @Route("/account/password", name="update_password")
  134.      */
  135.     public function updatePassword(Request $request, UserManager $userManager): RedirectResponse|Response
  136.     {
  137.         $success = null;
  138.         $errorArray = null;
  139.         $userId = $request->get('user_id');
  140.         /** @var User $user */
  141.         $user = $userManager->getRepository()->find($userId);
  142.         $oldPlainPassword = $request->get('old_password');
  143.         $newPlainPassword = $request->get('new_password');
  144.         $newPlainPasswordBis = $request->get('new_password_bis');
  145.         $result = $userManager->updatePasswordByUser($user, $oldPlainPassword, $newPlainPassword, $newPlainPasswordBis);
  146.         if (is_array($result)) {
  147.             $errorArray = $result;
  148.         } elseif ($result instanceof User) {
  149.             $userManager->updatePassword($user, $newPlainPassword);
  150.             $success = 'Le mot de passe a été modifié avec succès !';
  151.         } else {
  152.             $errorArray[] = 'Une erreur inconnue s\'est produite, veuillez contacter le Support.';
  153.         }
  154.         return $this->redirectToRoute('account', [
  155.             'user' => $user->getId(),
  156.             'success' => $success,
  157.             'error_array' => $errorArray,
  158.         ]);
  159.     }
  160. }