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.     public function __construct(
  28.         private Environment $twig,
  29.         private UrlGeneratorInterface $urlGenerator,
  30.         private AuthorizationCheckerInterface $authorizationChecker,
  31.         private Pool $adminPool,
  32.         private TemplateRegistryInterface $templateRegistry,
  33.         private FormFactoryInterface $formFactory,
  34.         private UserManagerInterface $userManager,
  35.         private MailerInterface $mailer,
  36.         private TokenGeneratorInterface $tokenGenerator,
  37.         private int $retryTtl
  38.     ) {
  39.     }
  40.     public function __invoke(Request $request): Response
  41.     {
  42.         if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
  43.             return new RedirectResponse($this->urlGenerator->generate('sonata_admin_dashboard'));
  44.         }
  45.         $form $this->formFactory->create(ResetPasswordRequestFormType::class);
  46.         $form->handleRequest($request);
  47.         if ($form->isSubmitted() && $form->isValid()) {
  48.             $username $form->get('username')->getData();
  49.             $user $this->userManager->findUserByUsernameOrEmail($username);
  50.             if (null !== $user && $user->isEnabled() && !$user->isPasswordRequestNonExpired($this->retryTtl) && $user->isAccountNonLocked()) {
  51.                 if (null === $user->getConfirmationToken()) {
  52.                     $user->setConfirmationToken($this->tokenGenerator->generateToken());
  53.                 }
  54.                 $this->mailer->sendResettingEmailMessage($user);
  55.                 $user->setPasswordRequestedAt(new \DateTime());
  56.                 $this->userManager->save($user);
  57.             }
  58.             return new RedirectResponse($this->urlGenerator->generate('sonata_user_admin_resetting_check_email', [
  59.                 'username' => $username,
  60.             ]));
  61.         }
  62.         return new Response($this->twig->render('@SonataUser/Admin/Security/Resetting/request.html.twig', [
  63.             'base_template' => $this->templateRegistry->getTemplate('layout'),
  64.             'admin_pool' => $this->adminPool,
  65.             'form' => $form->createView(),
  66.         ]));
  67.     }
  68. }