src/Admin/UI/Web/Controller/Security/ResetPasswordController.php line 23

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Admin\UI\Web\Controller\Security;
  4. use App\Admin\Application\Command\User\User\ChangePassword\ChangePasswordUserCommand;
  5. use App\Admin\Application\Command\User\User\ResetPassword\ResetPasswordCommand;
  6. use App\Admin\Application\Command\User\UserToken\Delete\DeleteUserTokenCommand;
  7. use App\Admin\Application\Query\User\UserToken\GetToken\UserGetTokenQuery;
  8. use App\Admin\UI\Web\Form\Types\Security\ResetPassword\ChangePasswordFormType;
  9. use App\Admin\UI\Web\Form\Types\Security\ResetPassword\ResetPasswordRequestFormType;
  10. use App\Core\Application\Command\CommandBusInterface;
  11. use App\Core\Application\Query\QueryBusInterface;
  12. use App\Core\Domain\Entity\User\UserToken;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  17. class ResetPasswordController extends AbstractController
  18. {
  19.     public function request(Request $requestCommandBusInterface $commandBus): Response
  20.     {
  21.         $form $this->createForm(ResetPasswordRequestFormType::class);
  22.         $form->handleRequest($request);
  23.         if ($form->isSubmitted() && $form->isValid()) {
  24.             $commandBus->dispatch(new ResetPasswordCommand($form->get('email')->getData()));
  25.             return $this->redirectToRoute('admin_web_security_reset_password_check_email');
  26.         }
  27.         return $this->render('Admin/security/reset_password/request.html.twig', [
  28.             'requestForm' => $form->createView(),
  29.         ]);
  30.     }
  31.     public function checkEmail(): Response
  32.     {
  33.         return $this->render('Admin/security/reset_password/check_email.html.twig');
  34.     }
  35.     public function changePassword(
  36.         string $token,
  37.         QueryBusInterface $queryBus,
  38.         Request $request,
  39.         CommandBusInterface $commandBus
  40.     ): Response {
  41.         $userToken $queryBus->handle(new UserGetTokenQuery($token));
  42.         if (!$userToken instanceof UserToken || !$userToken->isValid()) {
  43.             throw new NotFoundHttpException();
  44.         }
  45.         $form $this->createForm(ChangePasswordFormType::class);
  46.         $form->handleRequest($request);
  47.         if ($form->isSubmitted() && $form->isValid()) {
  48.             $commandBus->dispatch(
  49.                 new ChangePasswordUserCommand(
  50.                     $userToken->getRequester(),
  51.                     $form->get('plainPassword')->getData()
  52.                 )
  53.             );
  54.             $commandBus->dispatch(new DeleteUserTokenCommand($userToken));
  55.             $this->addFlash('success''ui.reset_password.reset_success');
  56.             return $this->redirectToRoute('admin_web_security_login');
  57.         }
  58.         return $this->render('Admin/security/reset_password/change_password.html.twig', [
  59.             'form' => $form->createView(),
  60.         ]);
  61.     }
  62. }