src/Controller/Admin/SecurityController.php line 109

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Page as PageEntity;
  4. use App\EventListener\FeatureFlagListener;
  5. use App\Renderer\Page;
  6. use Flagception\Manager\FeatureManagerInterface;
  7. use FOS\UserBundle\Controller\ResettingController;
  8. use FOS\UserBundle\Controller\SecurityController as BaseController;
  9. use FOS\UserBundle\Event\FilterUserResponseEvent;
  10. use FOS\UserBundle\Event\FormEvent;
  11. use FOS\UserBundle\Event\GetResponseUserEvent;
  12. use FOS\UserBundle\Form\Factory\FactoryInterface;
  13. use FOS\UserBundle\FOSUserEvents;
  14. use FOS\UserBundle\Model\UserManagerInterface;
  15. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  16. use Symfony\Component\HttpFoundation\RedirectResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\RequestStack;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\RouterInterface;
  21. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  22. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  23. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  24. use Symfony\Contracts\Translation\TranslatorInterface;
  25. class SecurityController extends BaseController
  26. {
  27.     public const TOKEN_LIFETIME_IN_HOURS 2;
  28.     private RequestStack $requestStack;
  29.     private Page $pageRenderer;
  30.     private RouterInterface $router;
  31.     private ResettingController $resettingController;
  32.     private UserManagerInterface $userManager;
  33.     private FactoryInterface $formFactory;
  34.     private EventDispatcherInterface $eventDispatcher;
  35.     private FeatureManagerInterface $featureManager;
  36.     private ParameterBagInterface $parameterBag;
  37.     public function __construct(
  38.         AuthenticationUtils $authenticationUtils,
  39.         CsrfTokenManagerInterface $tokenManager,
  40.         RequestStack $requestStack,
  41.         Page $pageRenderer,
  42.         RouterInterface $router,
  43.         ResettingController $resettingController,
  44.         UserManagerInterface $userManager,
  45.         FactoryInterface $formFactory,
  46.         EventDispatcherInterface $eventDispatcher,
  47.         FeatureManagerInterface $featureManager,
  48.         ParameterBagInterface $parameterBag
  49.     ) {
  50.         parent::__construct($authenticationUtils$tokenManager);
  51.         $this->requestStack $requestStack;
  52.         $this->pageRenderer $pageRenderer;
  53.         $this->router $router;
  54.         $this->resettingController $resettingController;
  55.         $this->userManager $userManager;
  56.         $this->formFactory $formFactory;
  57.         $this->eventDispatcher $eventDispatcher;
  58.         $this->featureManager $featureManager;
  59.         $this->parameterBag $parameterBag;
  60.     }
  61.     /**
  62.      * {@inheritdoc}
  63.      *
  64.      * @throws \Exception
  65.      */
  66.     protected function renderLogin(array $data): Response
  67.     {
  68.         if ($this->isGranted('IS_AUTHENTICATED_FULLY')) {
  69.             return $this->redirect($this->generateUrl('admin_dashboard_dashboard_index'));
  70.         }
  71.         $template '@admin/Security/login.html.twig';
  72.         $requestAttributes $this->requestStack->getMainRequest()->attributes;
  73.         $data['enableRegistration'] = false;
  74.         $data['enableForgotPassword'] = true;
  75.         $data['enableCompanyRegistration'] = false;
  76.         $data['loginCheck'] = $this->router->generate('fos_user_security_check');
  77.         $data['forgotPasswordLink'] = $this->router->generate('admin_forgot_password');
  78.         $data['azureLogin'] = $this->featureManager->isActive(FeatureFlagListener::FEATURE_OAUTH_SSO_AZURE);
  79.         $data['googleLogin'] = $this->featureManager->isActive(FeatureFlagListener::FEATURE_OAUTH_SSO_GOOGLE);
  80.         $data['getnoticedGoogleLogin'] = $this->featureManager->isActive(FeatureFlagListener::FEATURE_OAUTH_SSO_GETNOTICED_GOOGLE);
  81.         $data['pingfederateLogin'] = $this->featureManager->isActive(FeatureFlagListener::FEATURE_OAUTH_SSO_PINGFEDERATE);
  82.         if ('user_login' === $requestAttributes->get('_route')) {
  83.             if (true !== $this->parameterBag->get('site_user_active')) {
  84.                 return $this->redirectToRoute('homepage');
  85.             }
  86.             $data['loginCheck'] = $this->router->generate('user_check');
  87.             $data['forgotPasswordLink'] = $this->router->generate('pages_user_forgot_password');
  88.             $data['enableRegistration'] = $this->parameterBag->get('site_user_enable_registration');
  89.             $data['enableForgotPassword'] = $this->parameterBag->get('site_user_enable_forgot_password');
  90.             $data['enableCompanyRegistration'] = $this->parameterBag->get('site_user_enable_company_registration');
  91.             $page = (new PageEntity())
  92.                 ->setTitle('login')
  93.                 ->setBody($this->renderView('@default/user/Security/login_content.html.twig'$data))
  94.             ;
  95.             $response $this->render('@default/pages/pages_index.html.twig', [
  96.                 'header' => $this->pageRenderer->getHeader(),
  97.                 'footer' => $this->pageRenderer->getFooter(),
  98.                 'page' => $page,
  99.             ]);
  100.             $response->setSharedMaxAge(0);
  101.             return $response;
  102.         }
  103.         $response $this->render($template$data);
  104.         $response->setSharedMaxAge(0);
  105.         return $response;
  106.     }
  107.     public function forgotPasswordAction(Request $request): Response
  108.     {
  109.         if ($request->get('username')) {
  110.             $response $this->resettingController->sendEmailAction($request);
  111.             if ($response instanceof RedirectResponse) {
  112.                 return $this->redirectToRoute('admin_check_mail');
  113.             }
  114.         }
  115.         return $this->render('@admin/Security/forgot_password.html.twig');
  116.     }
  117.     public function checkMailAction(): Response
  118.     {
  119.         return $this->render('@admin/Security/check_mail.html.twig', [
  120.             'tokenLifetime' => self::TOKEN_LIFETIME_IN_HOURS,
  121.         ]);
  122.     }
  123.     public function resetAction(Request $request$tokenTranslatorInterface $translatorRouterInterface $router): Response
  124.     {
  125.         $user $this->userManager->findUserByConfirmationToken($token);
  126.         if (null === $user) {
  127.             return new RedirectResponse($router->generate('admin_dashboard_dashboard_index'));
  128.         }
  129.         $event = new GetResponseUserEvent($user$request);
  130.         $this->eventDispatcher->dispatch($eventFOSUserEvents::RESETTING_RESET_INITIALIZE);
  131.         if (null !== $event->getResponse()) {
  132.             return $event->getResponse();
  133.         }
  134.         $locale $request->getLocale();
  135.         $form $this->formFactory->createForm();
  136.         $form->setData($user);
  137.         $form->handleRequest($request);
  138.         if ($form->isSubmitted() && $form->isValid()) {
  139.             $event = new FormEvent($form$request);
  140.             $this->eventDispatcher->dispatch($eventFOSUserEvents::RESETTING_RESET_SUCCESS);
  141.             $this->userManager->updateUser($user);
  142.             if (null === $response $event->getResponse()) {
  143.                 $url $this->generateUrl('admin_dashboard_dashboard_index');
  144.                 $response = new RedirectResponse($url);
  145.             }
  146.             $this->eventDispatcher->dispatch(
  147.                 new FilterUserResponseEvent($user$request$response),
  148.                 FOSUserEvents::RESETTING_RESET_COMPLETED
  149.             );
  150.             return $response;
  151.         }
  152.         return $this->render('@admin/Security/reset.html.twig', [
  153.             'token' => $token,
  154.             'form' => $form->createView(),
  155.             'site_page_title' => $translator->trans('Reset Password', [], 'admin'$locale),
  156.         ]);
  157.     }
  158. }