vendor/sonata-project/user-bundle/src/Action/RequestAction.php line 30

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of the Sonata Project package.
  5.  *
  6.  * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Sonata\UserBundle\Action;
  12. use Sonata\AdminBundle\Admin\Pool;
  13. use Sonata\AdminBundle\Templating\TemplateRegistryInterface;
  14. use Sonata\UserBundle\Form\Type\ResetPasswordRequestFormType;
  15. use Sonata\UserBundle\Mailer\MailerInterface;
  16. use Sonata\UserBundle\Model\UserManagerInterface;
  17. use Sonata\UserBundle\Util\TokenGeneratorInterface;
  18. use Symfony\Component\Form\FormFactoryInterface;
  19. use Symfony\Component\HttpFoundation\RedirectResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  23. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  24. use Twig\Environment;
  25. final class RequestAction
  26. {
  27.     private Environment $twig;
  28.     private UrlGeneratorInterface $urlGenerator;
  29.     private AuthorizationCheckerInterface $authorizationChecker;
  30.     private Pool $adminPool;
  31.     private TemplateRegistryInterface $templateRegistry;
  32.     private FormFactoryInterface $formFactory;
  33.     private UserManagerInterface $userManager;
  34.     private MailerInterface $mailer;
  35.     private TokenGeneratorInterface $tokenGenerator;
  36.     private int $retryTtl;
  37.     public function __construct(
  38.         Environment $twig,
  39.         UrlGeneratorInterface $urlGenerator,
  40.         AuthorizationCheckerInterface $authorizationChecker,
  41.         Pool $adminPool,
  42.         TemplateRegistryInterface $templateRegistry,
  43.         FormFactoryInterface $formFactory,
  44.         UserManagerInterface $userManager,
  45.         MailerInterface $mailer,
  46.         TokenGeneratorInterface $tokenGenerator,
  47.         int $retryTtl
  48.     ) {
  49.         $this->twig $twig;
  50.         $this->urlGenerator $urlGenerator;
  51.         $this->authorizationChecker $authorizationChecker;
  52.         $this->adminPool $adminPool;
  53.         $this->templateRegistry $templateRegistry;
  54.         $this->formFactory $formFactory;
  55.         $this->userManager $userManager;
  56.         $this->mailer $mailer;
  57.         $this->tokenGenerator $tokenGenerator;
  58.         $this->retryTtl $retryTtl;
  59.     }
  60.     public function __invoke(Request $request): Response
  61.     {
  62.         if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
  63.             return new RedirectResponse($this->urlGenerator->generate('sonata_admin_dashboard'));
  64.         }
  65.         $form $this->formFactory->create(ResetPasswordRequestFormType::class);
  66.         $form->handleRequest($request);
  67.         if ($form->isSubmitted() && $form->isValid()) {
  68.             $username $form->get('username')->getData();
  69.             $user $this->userManager->findUserByUsernameOrEmail($username);
  70.             if (null !== $user && $user->isEnabled() && !$user->isPasswordRequestNonExpired($this->retryTtl) && $user->isAccountNonLocked()) {
  71.                 if (null === $user->getConfirmationToken()) {
  72.                     $user->setConfirmationToken($this->tokenGenerator->generateToken());
  73.                 }
  74.                 $this->mailer->sendResettingEmailMessage($user);
  75.                 $user->setPasswordRequestedAt(new \DateTime());
  76.                 $this->userManager->save($user);
  77.             }
  78.             return new RedirectResponse($this->urlGenerator->generate('sonata_user_admin_resetting_check_email', [
  79.                 'username' => $username,
  80.             ]));
  81.         }
  82.         return new Response($this->twig->render('@SonataUser/Admin/Security/Resetting/request.html.twig', [
  83.             'base_template' => $this->templateRegistry->getTemplate('layout'),
  84.             'admin_pool' => $this->adminPool,
  85.             'form' => $form->createView(),
  86.         ]));
  87.     }
  88. }