src/Controller/SecurityController.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  9. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  10. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  11. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  12. use Symfony\Component\Mailer\MailerInterface;
  13. use Symfony\Component\Mime\Address;
  14. use Symfony\Component\Mime\Email;
  15. class SecurityController extends AbstractController
  16. {
  17.     /**
  18.      * @Route("/login", name="app_login")
  19.      */
  20.     public function login(AuthenticationUtils $authenticationUtils): Response
  21.     {
  22.         // get the login error if there is one
  23.         $error = $authenticationUtils->getLastAuthenticationError();
  24.         // last username entered by the user
  25.         $lastUsername = $authenticationUtils->getLastUsername();
  26.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
  27.     }
  28.     /**
  29.      * @Route("/logout", name="app_logout", methods={"GET"})
  30.      */
  31.     public function logout()
  32.     {
  33.         // controller can be blank: it will never be executed!
  34.         throw new \Exception('Don\'t forget to activate logout in security.yaml');
  35.     }
  36.     /**
  37.      * @Route("/mot-de-passe-oublie", name="app_forgotten_password")
  38.      */
  39.     public function forgottenPassword(Request $request, UserPasswordEncoderInterface $encoder, MailerInterface $mailer, TokenGeneratorInterface $tokenGenerator): Response
  40.     {
  41.         if ($request->isMethod('POST')) {
  42.             $email = $request->request->get('email');
  43.             $entityManager = $this->getDoctrine()->getManager();
  44.             $user = $entityManager->getRepository(User::class)->findOneByEmail($email);
  45.             /* @var $user User */
  46.             if ($user === null) {
  47.                 $this->addFlash('danger', 'Email Inconnu');
  48.                 return $this->redirectToRoute('app_forgotten_password');
  49.             }
  50.             $token = $tokenGenerator->generateToken();
  51.             try{
  52.                 $user->setResetToken($token);
  53.                 $entityManager->flush();
  54.             } catch (\Exception $e) {
  55.                 $this->addFlash('warning', $e->getMessage());
  56.                 return $this->redirectToRoute('app_login');
  57.             }
  58.             $url = $this->generateUrl('app_reset_password', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL);
  59.             $html = $this->renderView(
  60.                 'emails/forgotten_password.html.twig',
  61.                 [
  62.                     'user' => $user,
  63.                     'url' => $url
  64.                 ]
  65.             );
  66.             $message = (new Email())
  67.                 ->from(new Address($this->getParameter('admin_email'), 'prejeance industrial'))
  68.                 ->to($user->getEmail())
  69.                 ->subject('Mot de passe oublié')
  70.                 ->html($html);
  71.             $mailer->send($message);
  72.             $this->addFlash('notice', 'Mail envoyé');
  73.             return $this->redirectToRoute('app_login');
  74.         }
  75.         return $this->render('security/forgotten_password.html.twig');
  76.     }
  77.     /**
  78.      * @Route("/changer-mot-de-passe/{token}", name="app_reset_password")
  79.      */
  80.     public function resetPassword(Request $request, string $token, UserPasswordEncoderInterface $passwordEncoder)
  81.     {
  82.         if ($request->isMethod('POST')) {
  83.             $entityManager = $this->getDoctrine()->getManager();
  84.             $user = $entityManager->getRepository(User::class)->findOneByResetToken($token);
  85.             /* @var $user User */
  86.             if ($user === null) {
  87.                 $this->addFlash('danger', 'Token Inconnu');
  88.                 return $this->redirectToRoute('app_reset_password',['token' => $token]);
  89.             }
  90.             $user->setResetToken(null);
  91.             $user->setPassword($passwordEncoder->encodePassword($user, $request->request->get('password')));
  92.             $entityManager->flush();
  93.             $this->addFlash('notice', 'Mot de passe mis à jour');
  94.             return $this->redirectToRoute('app_login');
  95.         }else {
  96.             return $this->render('security/reset_password.html.twig', ['token' => $token]);
  97.         }
  98.     }
  99. }