src/App/Event/SecurityHttpEvent.php line 80

Open in your IDE?
  1. <?php
  2. namespace App\Event;
  3. use App\Entity\Parametre\Utilisateur;
  4. use App\Form\Authenticator\LoginAuthenticatorType;
  5. use App\Helper\UserHelper;
  6. use Doctrine\Bundle\DoctrineBundle\Registry;
  7. use Symfony\Component\Form\FormFactoryInterface;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
  10. use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
  11. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  12. use Symfony\Contracts\Translation\TranslatorInterface;
  13. use Twig\Environment;
  14. /**
  15.  * SecurityInteractiveLogin.
  16.  *
  17.  * @author John Doe
  18.  * @package App\Event
  19.  */
  20. class SecurityHttpEvent {
  21.     /** @var Registry */
  22.     private $doctrine;
  23.     /** @var FormFactoryInterface */
  24.     private $formFactory;
  25.     /** @var RequestStack */
  26.     private $requestStack;
  27.     /** @var TokenStorage */
  28.     private $tokenStorage;
  29.     /** @var TranslatorInterface */
  30.     private $translator;
  31.     /** @var Environment */
  32.     private $twig;
  33.     /**
  34.      * SecurityInteractiveLogin constructor.
  35.      *
  36.      * @param Registry $doctrine
  37.      * @param RequestStack $requestStack
  38.      * @param TranslatorInterface $translator
  39.      * @param UsageTrackingTokenStorage $tokenStorage
  40.      * @param Environment $twig
  41.      * @param FormFactoryInterface $formFactory
  42.      */
  43.     public function __construct(Registry $doctrineRequestStack $requestStackTranslatorInterface $translatorUsageTrackingTokenStorage $tokenStorageEnvironment $twigFormFactoryInterface $formFactory) {
  44.         $this->doctrine     $doctrine;
  45.         $this->requestStack $requestStack;
  46.         $this->translator   $translator;
  47.         $this->tokenStorage $tokenStorage;
  48.         $this->twig         $twig;
  49.         $this->formFactory  $formFactory;
  50.     }
  51.     /**
  52.      * Get the entity manager.
  53.      *
  54.      * @return \Doctrine\Persistence\ObjectManager
  55.      */
  56.     private function em() {
  57.         return $this->doctrine->getManager();
  58.     }
  59.     /**
  60.      * Event on login success.
  61.      *
  62.      * @param InteractiveLoginEvent $event
  63.      * @return false
  64.      * @throws \Twig\Error\LoaderError
  65.      * @throws \Twig\Error\RuntimeError
  66.      * @throws \Twig\Error\SyntaxError
  67.      */
  68.     public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) {
  69.         /** @var Utilisateur $user */
  70.         $user $event->getAuthenticationToken()->getUser();
  71.         // Check session.
  72. //        if (true === UserHelper::hasCurrentlyActiveSession($this->requestStack->getCurrentRequest(), $user)) {
  73. //
  74. //            // Create form.
  75. //            $form = $this->formFactory->create(LoginAuthenticatorType::class);
  76. //            $form->handleRequest($event->getRequest());
  77. //
  78. //            $event->getRequest()->getSession()->set("loginError", "SESSION_ALREADY_ACTIVE");
  79. //            $this->renderView("Authentication/login.html.twig", [
  80. //                "error"         => [
  81. //                    "messageKey"  => $this->translator->trans("app_login.session_active", [], "authenticator"),
  82. //                    "messageData" => [],
  83. //                ],
  84. //                "localeLangage" => $this->translator->getLocale(),
  85. //                "form"          => $form->createView(),
  86. //            ]);
  87. //        }
  88.         // If is first connexion.
  89.         if ($user->getDatePremiereConnexion() === null) {
  90.             $user->setDatePremiereConnexion(new \DateTime());
  91.         }
  92.         // Update user information.
  93.         $user->setDateDerniereConnexion(new \DateTime());
  94.         $user->setAdresseIp($this->requestStack->getCurrentRequest()->getClientIp());
  95.         $user->setUserAgent($this->requestStack->getCurrentRequest()->headers->get("user-agent"));
  96.         $user->setDateSessionExpiration(new \DateTime());
  97.         $user->getDateSessionExpiration()->modify("+2 min");
  98.         // Create session to save the session token.
  99.         $event->getRequest()->getSession()->set("UpdateSessionToken"1);
  100.         // Set session lang.
  101.         if (null !== $user->getLang()) {
  102.             $event->getRequest()->getSession()->set('_locale'$user->getLang());
  103.         }
  104.         // Flush informations.
  105.         $this->em()->flush();
  106.     }
  107.     /**
  108.      * Render twig view.
  109.      *
  110.      * @param $twigPath
  111.      * @param $parameters
  112.      * @return false
  113.      * @throws \Twig\Error\LoaderError
  114.      * @throws \Twig\Error\RuntimeError
  115.      * @throws \Twig\Error\SyntaxError
  116.      */
  117.     private function renderView($twigPath$parameters) {
  118.         $view $this->twig->render($twigPath$parameters);
  119.         exit($view);
  120.         return false;
  121.     }
  122. }