src/Controller/SecurityController.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Security\ServiceSession;
  4. use App\Entity\SMS;
  5. use App\Entity\User\User;
  6. use App\Repository\User\UserRepository;
  7. use App\Services\Helpers\MattermostHelper;
  8. use App\Services\Security\ServiceSessionService;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
  11. use Psr\Log\LoggerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Notifier\Bridge\Slack\Block\SlackActionsBlock;
  17. use Symfony\Component\Notifier\Bridge\Slack\Block\SlackDividerBlock;
  18. use Symfony\Component\Notifier\Bridge\Slack\Block\SlackImageBlockElement;
  19. use Symfony\Component\Notifier\Bridge\Slack\Block\SlackSectionBlock;
  20. use Symfony\Component\Notifier\Bridge\Slack\SlackOptions;
  21. use Symfony\Component\Notifier\ChatterInterface;
  22. use Symfony\Component\Notifier\Exception\TransportExceptionInterface;
  23. use Symfony\Component\Notifier\Message\ChatMessage;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  26. class SecurityController extends AbstractController
  27. {
  28.     public function __construct(
  29.         public ChatterInterface $chatter1,
  30.         public EntityManagerInterface $em,
  31.         public UserRepository $userRepository,
  32.         public ServiceSessionService $sessionService,
  33.         public JWTTokenManagerInterface $jwtManager,
  34.         public MattermostHelper $mattermostHelper,
  35.         public LoggerInterface $logger,
  36.     )
  37.     {
  38.     }
  39.     /**
  40.      * @throws \Doctrine\ORM\NonUniqueResultException
  41.      */
  42.     #[Route('/login'name'app_email_user')]
  43.     public function login(Request $request): Response
  44.     {
  45.         match (true) {
  46.             $request->get('redirecturl') !== null => $redirectUrl $request->get('redirecturl'),
  47.             default => $redirectUrl null,
  48.         };
  49.         if (null !== $this->getUser()  ) {
  50.             $session $this->em->getRepository(ServiceSession::class)->findOneBy(
  51.                 [
  52.                     'userId' => $this->getUser(),
  53.                     'active' => true
  54.                 ]);
  55.             if (empty($session)) {
  56.                 $session $this->sessionService->createSession($this->getUser(), $request);
  57.                 $this->em->persist($session);
  58.                 $this->em->flush();
  59.             }
  60.             $authToken $this->jwtManager->create($this->getUser());
  61.             $sessionAuth $request->getSession();
  62.             $sessionAuth->set('auth_token'$authToken);
  63.             $sessionAuth->set('token'$session->getToken());
  64.             if ($request->get('redirecturl') !== null) {
  65.                 return new RedirectResponse($request->get('redirecturl') . '?token=' $session->getToken() . '&auth_token=' $authToken);
  66.             }
  67.             $this->logger->info('AuthToken', [$authToken]);
  68.             return $this->redirectToRoute('main');
  69.         }
  70.         if (!empty($request->query->get('error'))) {
  71.             return $this->render('security/login.html.twig',
  72.                 [
  73.                     'identity' => $request->get('identity'),
  74.                     'redirectUrl' => $redirectUrl,
  75.                     'error' => $request->query->get('error')
  76.                 ]);
  77.         }
  78.         return $this->render('security/login.html.twig',
  79.             [
  80.                 'redirectUrl' => $redirectUrl,
  81.             ]);
  82.     }
  83.     /**
  84.      * @param Request $request
  85.      * @param AuthenticationUtils $authenticationUtils
  86.      */
  87.     #[Route('/login/accept'name'app_login')]
  88.     public function acceptLogin(
  89.         Request $request,
  90.         AuthenticationUtils $authenticationUtils
  91.     )
  92.     {
  93.         // if ($this->getUser()) {
  94.         //     return $this->redirectToRoute('target_path');
  95.         // }
  96.         // get the login error if there is one
  97.         $error $authenticationUtils->getLastAuthenticationError();
  98.         // last username entered by the user
  99.         $lastUsername $authenticationUtils->getLastUsername();
  100.     }
  101.     #[Route('/logout'name'app_logout')]
  102.     public function logout(): void
  103.     {
  104.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
  105.     }
  106.     #[Route('/user/check'name'user_check')]
  107.     public function checkUser(Request $request): Response
  108.     {
  109.         if (null !==  $this->getUser()  && $request->get('redirecturl') !== null) {
  110.             $session $this->em->getRepository(ServiceSession::class)->findOneBy(
  111.                 [
  112.                     'userId' => $this->getUser()->getId(),
  113.                     'active' => true
  114.                 ]);
  115.             if (empty($session)) {
  116.                 $session $this->sessionService->createSession($this->getUser(), $request);
  117.                 $this->em->persist($session);
  118.                 $this->em->flush();
  119.             }
  120.             return new RedirectResponse($request->get('redirecturl') . '?token=' $session->getToken());
  121.         }
  122.         return $this->redirectToRoute('app_login');
  123.     }
  124. }