src/Controller/forgotPassword/ForgotPasswordController.php line 23

  1. <?php
  2. namespace App\Controller\forgotPassword;
  3. use App\Controller\BaseController;
  4. use Exception;
  5. use Psr\Log\LoggerInterface;
  6. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  7. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  8. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  9. use Symfony\Component\Form\FormInterface;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Component\Validator\Constraints\NotBlank;
  15. use Symfony\Component\Validator\Constraints\NotCompromisedPassword;
  16. class ForgotPasswordController extends BaseController
  17. {
  18.     #[Route('/forgot-password'name'forgot_password_step_one')]
  19.     public function indexAction(LoggerInterface $loggerRequest $request): Request|Response
  20.     {
  21.         $form $this->forgotPasswordForm();
  22.         $form->handleRequest($request);
  23.         $showMessage false;
  24.         if ($form->isSubmitted() && $form->isValid()) {
  25.             $data $form->getData();
  26.             try {
  27.                 $response $this->client()->post('/forgot-password-verify-user', [
  28.                     'json' => [
  29.                         'username' => $data['username']
  30.                     ]
  31.                 ]);
  32.                 if ($response->getStatusCode() === Response::HTTP_OK) {
  33.                     $showMessage true;
  34.                 }
  35.             } catch (Exception $exception) {
  36.                 $logger->error($exception->getMessage());
  37.             }
  38.         }
  39.         return $this->render('forgot-password/index.html.twig', [
  40.             'form' => $form->createView(),
  41.             'showMessage' => $showMessage,
  42.             'message' => 'Please enter your email below'
  43.         ]);
  44.     }
  45.     #[Route('/forgot-password/rest/{token}'name'forgot_step_two')]
  46.     public function restAction(string $tokenLoggerInterface $loggerRequest $request): Request|Response
  47.     {
  48.         $form $this->passwordForm();
  49.         $form->handleRequest($request);
  50.         if ($form->isSubmitted() && $form->isValid()) {
  51.             $data $form->getData();
  52.             try {
  53.                 $this->client()->post('/forgot-password', [
  54.                     'json' => [
  55.                         'token' => $token,
  56.                         'password' => $data['password']
  57.                     ]
  58.                 ]);
  59.                 $this->addFlash(BaseController::FLASH_SUCCESS'Your Password has been Updated');
  60.             } catch (Exception $exception) {
  61.                 $logger->error($exception->getMessage());
  62.             }
  63.             return new RedirectResponse($this->generateUrl('login'));
  64.         }
  65.         return $this->render('forgot-password/index.html.twig', [
  66.             'showMessage' => false,
  67.             'form' => $form->createView(),
  68.             'message' => 'Please enter your new password below'
  69.         ]);
  70.     }
  71.     public function forgotPasswordForm(): FormInterface
  72.     {
  73.         return $this->createFormBuilder()
  74.             ->add('username'EmailType::class, [
  75.                 'required' => true,
  76.                 'constraints' => [
  77.                     new NotCompromisedPassword(),
  78.                     new NotBlank(),
  79.                 ]
  80.         ])->getForm();
  81.     }
  82.     private function passwordForm(): FormInterface
  83.     {
  84.         return $this->createFormBuilder()
  85.             ->add('password'RepeatedType::class, [
  86.                 'type' => PasswordType::class,
  87.                 'invalid_message' => 'The password fields must match.',
  88.                 'required' => true,
  89.                 'first_options'  => ['label' => 'Password'],
  90.                 'second_options' => ['label' => 'Repeat Password'],
  91.                 'constraints' => [
  92.                     new NotCompromisedPassword(),
  93.                     new NotBlank(),
  94.                 ]
  95.             ])->getForm();
  96.     }
  97. }