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. }
  60. return new Response($this->twig->render('@SonataUser/Admin/Security/Resetting/request.html.twig', [
  61. 'base_template' => $this->templateRegistry->getTemplate('layout'),
  62. 'admin_pool' => $this->adminPool,
  63. 'form' => $form->createView(),
  64. ]));
  65. }
  66. }