src/Controller/SecurityController.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Form\ResetPasswordType;
  5. use App\Services\APIMailer;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Exception;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. use Symfony\Component\Routing\RouterInterface;
  15. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  16. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  17. use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  18. class SecurityController extends AbstractController
  19. {
  20.     /**
  21.      * @Route("/", name="app_login")
  22.      */
  23.     public function login(AuthenticationUtils $authenticationUtils): Response
  24.     {
  25.         if ($this->getUser()) {
  26.             return $this->redirectToRoute('app_coupons');
  27.         }
  28.         // get the login error if there is one
  29.         $error $authenticationUtils->getLastAuthenticationError();
  30.         // last username entered by the user
  31.         $lastUsername $authenticationUtils->getLastUsername();
  32. //        if($lastUsername){
  33. //            return $this->redirectToRoute("app_coupons");
  34. //        }
  35.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  36.     }
  37.     /**
  38.      * @Route("/logout", name="app_logout")
  39.      */
  40.     public function logout()
  41.     {
  42.         throw new Exception('This method can be blank - it will be intercepted by the logout key on your firewall');
  43.     }
  44.     /**
  45.      * @Route("/mot-de-passe-oublie", name="forgot_password")
  46.      * @throws Exception
  47.      * @throws TransportExceptionInterface
  48.      */
  49.     public function forgotPassword(Request $requestAPIMailer $mailerEntityManagerInterface $entityManagerParameterBagInterface $parameterBagUrlGeneratorInterface $urlGenerator): Response
  50.     {
  51.         $email $request->request->get('email');
  52.         if ('' !== $email && null !== $email) {
  53.             $user $entityManager->getRepository(User::class)->findOneBy(['email' => $email]);
  54.             if ($user instanceof User) {
  55.                 $token md5(random_bytes(20));
  56.                 $user
  57.                     ->setToken($token)
  58.                     ->setTokenCreated(new \DateTime())
  59.                 ;
  60.                 $entityManager->persist($user);
  61.                 $entityManager->flush();
  62.                 $result $mailer->sendEmail(
  63.                     $parameterBag->get('email_reset_password'),
  64.                     ['email' => $email'link' => $urlGenerator->generate('reset_password', ['token' => $token], UrlGeneratorInterface::ABSOLUTE_URL)]
  65.                 );
  66.             }
  67.             $this->addFlash('success''Un message a été envoyé dans votre boîte de réception');
  68.         }
  69.         return $this->render('security/forgotten_password.html.twig');
  70.     }
  71.     /**
  72.      * @Route("/reset-mot-de-passe/{token}", name="reset_password")
  73.      */
  74.     public function resetPassword(string $tokenRequest $requestEntityManagerInterface $entityManagerUserPasswordEncoderInterface $passwordEncoder): Response
  75.     {
  76.         if ('' === $token) {
  77.             return $this->redirectToRoute('app_login');
  78.         }
  79.         $user $entityManager->getRepository(User::class)->findOneBy(['token' => $token]);
  80.         if (!$user instanceof User) {
  81.             return $this->redirectToRoute('app_login');
  82.         }
  83.         $interval strtotime((new \DateTime())->format("Y-m-d H:i:s")) - strtotime($user->getTokenCreated()->format("Y-m-d H:i:s"));
  84.         if (< ($interval / (60 60 24))) {
  85.             $user
  86.                 ->setToken(null)
  87.                 ->setTokenCreated(null);
  88.         }
  89.         $form $this->createForm(ResetPasswordType::class);
  90.         $form->handleRequest($request);
  91.         if ($form->isSubmitted()) {
  92.             if ($form->isValid()) {
  93.                 $data $form->getData();
  94.                 $password $data['password'];
  95.                 $user
  96.                     ->setToken(null)
  97.                     ->setTokenCreated(null);
  98.                 $user->setPassword($passwordEncoder->encodePassword(
  99.                     $user,
  100.                     $password
  101.                 ));
  102.                 $entityManager->flush();
  103.                 $this->addFlash('success''Votre nouveau mot de passe a été enregistré avec succès');
  104.             }
  105.         }
  106.         $entityManager->flush();
  107.         return $this->render('security/reset_password.html.twig', [
  108.             'form' => $form->createView()
  109.         ]);
  110.     }
  111. }