src/Controller/SecurityController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Config\ConfigManager;
  4. use App\Entity\AbstractPage;
  5. use App\Entity\Config;
  6. use App\Entity\User;
  7. use App\Exception\User\PasswordAlreadyDefinedException;
  8. use App\Exception\User\PasswordResetTokenExpired;
  9. use App\Repository\UserRepository;
  10. use App\User\UserPasswordManager;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
  18. use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;
  19. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  20. class SecurityController extends AbstractController
  21. {
  22.     /**
  23.      * @param AuthenticationUtils $authenticationUtils
  24.      *
  25.      * @return Response
  26.      */
  27.     public function login(AuthenticationUtils $authenticationUtilsConfigManager $configManager): Response
  28.     {
  29.          if ($this->getUser()) {
  30.             $this->redirect($configManager->getConfigLink('home_page_dashboard'));
  31.          }
  32.         $error $authenticationUtils->getLastAuthenticationError();
  33.         $lastUsername $authenticationUtils->getLastUsername();
  34.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  35.     }
  36.     /**
  37.      * @param User $user
  38.      * @param Request $request
  39.      * @param EntityManagerInterface $entityManager
  40.      * @param EncoderFactoryInterface $encoderFactory
  41.      * @param ConfigManager $configManager
  42.      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  43.      * @throws PasswordAlreadyDefinedException
  44.      */
  45.     public function validation(User $userRequest $requestEntityManagerInterface $entityManagerEncoderFactoryInterface $encoderFactoryConfigManager $configManager)
  46.     {
  47.         if (!empty($user->getPassword())) {
  48.             throw new PasswordAlreadyDefinedException($user);
  49.         }
  50.         $submittedToken $request->request->get('_csrf_token');
  51.         $password $request->request->get('password');
  52.         $confirm $request->request->get('confirm');
  53.         if (empty($password)) {
  54.             return $this->render('security/set-password.html.twig');
  55.         }
  56.         if (!$this->isCsrfTokenValid('set-password'$submittedToken)) {
  57.             return $this->render('security/set-password.html.twig', ['error' => 'Token expiré, merci de remplir à nouveau le formulaire.']);
  58.         }
  59.         if ($confirm !== $password) {
  60.             return $this->render('security/set-password.html.twig', ['error' => 'Merci de saisir le même mot de passe.']);
  61.         }
  62.         $encoder $encoderFactory->getEncoder($user);
  63.         $user->setPassword($encoder->encodePassword($passwordnull));
  64.         $user->setEnabled(true);
  65.         $entityManager->flush();
  66.         $link $configManager->getConfigLink('home_page');
  67.         return $this->redirect($link);
  68.     }
  69.     /**
  70.      * @param Request $request
  71.      * @param UserPasswordManager $passwordManager
  72.      * @param UserRepository $userRepository
  73.      * @return \Symfony\Component\HttpFoundation\JsonResponse
  74.      * @throws \Twig\Error\LoaderError
  75.      * @throws \Twig\Error\RuntimeError
  76.      * @throws \Twig\Error\SyntaxError
  77.      */
  78.     public function askResetPassword(Request $requestUserPasswordManager $passwordManagerUserRepository $userRepository)
  79.     {
  80.         $submittedToken $request->request->get('_csrf_token');
  81.         if (!$this->isCsrfTokenValid('reset-password'$submittedToken)) {
  82.             return $this->json(['success' => false'message' => 'Token invalide. Merci de recharger votre page.']);
  83.         }
  84.         $email $request->request->get('email');
  85.         if (empty($email)) {
  86.             return $this->json(['success' => false'message' => 'Merci de saisir votre email.']);
  87.         }
  88.         $user $userRepository->findOneBy(['email' => $email]);
  89.         if (!$user instanceof User) {
  90.             return $this->json(['success' => false'message' => 'Aucun compte connu avec cette adresse mail.']);
  91.         }
  92.         $passwordManager->askResetPassword($user);
  93.         return $this->json(['success' => true]);
  94.     }
  95.     /**
  96.      * @ParamConverter("user", options={"mapping": {"id": "id", "requestPasswordToken": "requestPasswordToken"}})
  97.      *
  98.      * @param User $user
  99.      * @param UserPasswordManager $passwordManager
  100.      * @param Request $request
  101.      * @param EntityManagerInterface $entityManager
  102.      * @param EncoderFactoryInterface $encoderFactory
  103.      * @param ConfigManager $configManager
  104.      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  105.      * @throws PasswordResetTokenExpired
  106.      */
  107.     public function resetPassword(User $userUserPasswordManager $passwordManagerRequest $requestEntityManagerInterface $entityManagerEncoderFactoryInterface $encoderFactoryConfigManager $configManager)
  108.     {
  109.         if (!$passwordManager->canResetPassword($user)) {
  110.             throw new PasswordResetTokenExpired($user);
  111.         }
  112.         $submittedToken $request->request->get('_csrf_token');
  113.         $password $request->request->get('password');
  114.         $confirm $request->request->get('confirm');
  115.         if (empty($password)) {
  116.             return $this->render('security/set-password.html.twig');
  117.         }
  118.         if (!$this->isCsrfTokenValid('set-password'$submittedToken)) {
  119.             return $this->render('security/set-password.html.twig', ['error' => 'Token expiré, merci de remplir à nouveau le formulaire.']);
  120.         }
  121.         if ($confirm !== $password) {
  122.             return $this->render('security/set-password.html.twig', ['error' => 'Merci de saisir le même mot de passe.']);
  123.         }
  124.         $encoder $encoderFactory->getEncoder($user);
  125.         $user->setPassword($encoder->encodePassword($passwordnull));
  126.         $user->setEnabled(true);
  127.         $entityManager->flush();
  128.         $link $configManager->getConfigLink('home_page');
  129.         return $this->redirect($link);
  130.     }
  131.     /**
  132.      * @throws \Exception
  133.      */
  134.     public function logout()
  135.     {
  136.     }
  137. }