src/Controller/SecurityController.php line 169

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  8. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  11. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  12. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  13. use App\Form\UserType;
  14. use App\Form\ProfileType;
  15. use App\Entity\User;
  16. use App\Service\Breadcrumb;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. class SecurityController extends AbstractController
  19. {
  20.     private $breadcrumb;
  21.     public function __construct(Breadcrumb $breadcrumb){
  22.         $this->breadcrumb $breadcrumb;
  23.     }
  24.     /**
  25.      * @Route("/login", name="app_login")
  26.      */
  27.     public function login(AuthenticationUtils $authenticationUtils): Response
  28.     {
  29.         // get the login error if there is one
  30.         $error $authenticationUtils->getLastAuthenticationError();
  31.         // last username entered by the user
  32.         $lastUsername $authenticationUtils->getLastUsername();
  33.         return $this->render('security/login.html.twig', ['last_username' => $lastUsername'error' => $error]);
  34.     }
  35.     /**
  36.      * @Route("/register", name="app_register")
  37.      */
  38.     public function register(Request $requestUserPasswordEncoderInterface $passwordEncoder): Response
  39.     {
  40.         $user = new User();
  41.         $form $this->createForm(UserType::class, $user);
  42.         $form->handleRequest($request);
  43.         if ($form->isSubmitted() && $form->isValid()) {
  44.             // encode the plain password
  45.             $user->setPassword(
  46.                 $passwordEncoder->encodePassword(
  47.                     $user,
  48.                     $form->get('plainPassword')->getData()
  49.                 )
  50.             );
  51.             //$user->setBirthDate(new \Datetime(date('Y-m-d',strtotime($request->get('user')['birthDate']))));
  52.             $entityManager $this->getDoctrine()->getManager();
  53.             $entityManager->persist($user);
  54.             $entityManager->flush();
  55.             // do anything else you need here, like send an email
  56.             $token = new UsernamePasswordToken($usernull'main'$user->getRoles());
  57.             $this->container->get('security.token_storage')->setToken($token);
  58.             $this->container->get('session')->set('_security_main'serialize($token));
  59.             return $this->redirectToRoute('dashboard');
  60.         }
  61.         return $this->render('security/register.html.twig', [
  62.             'form' => $form->createView(),
  63.         ]);
  64.     }
  65.     /**
  66.      * @Route("/profile", name="app_profile")
  67.      */
  68.     public function profile(Request $request,TokenStorageInterface $tokenStorageTranslatorInterface $translator): Response
  69.     {
  70.         $this->breadcrumb->set([
  71.             $translator->trans('Tableau de bord') => 'dashboard',
  72.             'Profile' => NULL
  73.         ]);
  74.         $user $tokenStorage->getToken()->getUser();
  75.         $form $this->createForm(ProfileType::class, $user);
  76.         $form->handleRequest($request);
  77.         if ($form->isSubmitted() && $form->isValid()) {
  78.             //$user->setBirthDate(new \Datetime(date('Y-m-d',strtotime($request->get('user')['birthDate']))));
  79.             $entityManager $this->getDoctrine()->getManager();
  80.             $entityManager->persist($user);
  81.             $entityManager->flush();
  82.             return $this->redirectToRoute('dashboard');
  83.         }
  84.         return $this->render('security/profile.html.twig', [
  85.             'form' => $form->createView(),
  86.         ]);
  87.     }
  88.     /**
  89.      * @Route("/logout", name="app_logout", methods={"GET"})
  90.      */
  91.     public function logout(): Response
  92.     {
  93.         // controller can be blank: it will never be executed!
  94.         throw new \Exception('Don\'t forget to activate logout in security.yaml');
  95.     }
  96.     /**
  97.      * @Route("/forgotten_password", name="app_forgotten_password")
  98.      */
  99.     public function forgottenPassword
  100.         Request $request
  101.         UserPasswordEncoderInterface $encoder
  102.         \Swift_Mailer $mailer,  
  103.         TokenGeneratorInterface $tokenGenerator ): Response
  104.     {
  105.         
  106.         if ($request->isMethod('POST')) {
  107.             $email $request->request->get('email');
  108.             $entityManager $this->getDoctrine()->getManager();
  109.             $user $entityManager->getRepository(User::class)->findOneByEmail($email);
  110.             if ($user === null) {
  111.                 $this->addFlash('error''Cet adresse e-mail n\'est pas connue de notre système');
  112.                 return $this->redirectToRoute('app_login');
  113.             }
  114.             $token $tokenGenerator->generateToken();
  115.             try{
  116.                 $user->setResetToken($token);
  117.                 $entityManager->flush();
  118.             } catch (\Exception $e) {
  119.                 $this->addFlash('error'$e->getMessage());
  120.                 return $this->redirectToRoute('app_login');
  121.             }
  122.             $url $this->generateUrl('app_reset_password', array('token' => $token), UrlGeneratorInterface::ABSOLUTE_URL);
  123.             $message = (new \Swift_Message('Réinitialisation de votre mot de passe'))
  124.                 ->setFrom('info@oura.ch')
  125.                 ->setTo($user->getEmail())
  126.                 ->setBody(
  127.                     $this->renderView(
  128.                         'emails/reset_password.html.twig',
  129.                         ['url' => $url]
  130.                     ),
  131.                     'text/html'
  132.                 );
  133.             $mailer->send($message);
  134.             $this->addFlash('notice''Un e-mail vient de vous être envoyé pour réinitialiser votre mot de passe');
  135.             return $this->redirectToRoute('dashboard');
  136.         }
  137.         return $this->render('security/forgotten_password.html.twig');
  138.     }
  139.     /**
  140.      * @Route("/reset_password/{token}", name="app_reset_password")
  141.      * @Route("/create_password/{token}", name="app_create_password")
  142.      */
  143.     public function setPassword(Request $requeststring $tokenUserPasswordEncoderInterface $passwordEncoder)
  144.     {
  145.  
  146.         if ($request->isMethod('POST')) {
  147.             $entityManager $this->getDoctrine()->getManager();
  148.  
  149.             $user $entityManager->getRepository(User::class)->findOneByResetToken($token);
  150.             /* @var $user User */
  151.  
  152.             if ($user === null) {
  153.                 $this->addFlash('danger''Token Inconnu');
  154.                 return $this->redirectToRoute('dashboard');
  155.             }
  156.  
  157.             $user->setResetToken(null);
  158.             $user->setPassword($passwordEncoder->encodePassword($user$request->request->get('password')));
  159.             $entityManager->flush();
  160.  
  161.             $this->addFlash('notice''Mot de passe mis à jour');
  162.  
  163.             return $this->redirectToRoute('app_login');
  164.         }else {
  165.             return $this->render('security/reset_password.html.twig', ['token' => $token]);
  166.         }
  167.     }
  168. }