Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
digitalascetic/base-user / Controller / ResetController.php
Size: Mime:
<?php


namespace DigitalAscetic\BaseUserBundle\Controller;


use DigitalAscetic\BaseUserBundle\Entity\AbstractBaseUser;
use DigitalAscetic\BaseUserBundle\Form\ResetPasswordRequestType;
use DigitalAscetic\BaseUserBundle\Form\ResetPasswordType;
use DigitalAscetic\BaseUserBundle\Service\ResetPasswordService;
use DigitalAscetic\BaseUserBundle\Service\UserManagerInterface;
use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
use Symfony\Component\Form\Forms;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\RouterInterface;
use Twig\Environment;

class ResetController
{
    public function __construct(
        private Environment          $twig,
        private UserManagerInterface $userManager,
        private ResetPasswordService $resetPasswordService,
        private RouterInterface      $router
    )
    {
    }

    public function resetPasswordRequest(Request $request)
    {
        $formFactory = Forms::createFormFactoryBuilder()
            ->addExtension(new HttpFoundationExtension())
            ->getFormFactory();

        $form = $formFactory->create(ResetPasswordRequestType::class, [], []);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $email = $form->get('email')->getData();
            $user = $this->userManager->findUserBy(['email' => $email]);

            if ($user instanceof AbstractBaseUser) {
                $this->resetPasswordService->requestResetPassword($user);
            }
        }

        return new Response($this->twig->render('@DigitalAsceticBaseUser/reset/reset_password.html.twig', ['form' => $form->createView()]));
    }

    public function resetPasswordConfirm(Request $request, string $token)
    {
        /** @var AbstractBaseUser|bool $user */
        $user = $this->resetPasswordService->validateResetPasswordToken($token);

        $error = null;

        if (!$user) {
            $error = 'USER_NOT_FOUND';
        }

        $formFactory = Forms::createFormFactoryBuilder()
            ->addExtension(new HttpFoundationExtension())
            ->getFormFactory();

        $form = $formFactory->create(ResetPasswordType::class, [], []);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $plainPassword = $form->get('password')->getData();

            if ($user) {
                $this->resetPasswordService->doResetUserPassword($user, $plainPassword);
                return new RedirectResponse($this->router->generate('digital_ascetic_base_user_security_login'));
            }
        }

        return new Response($this->twig->render(
            '@DigitalAsceticBaseUser/reset/reset_password.html.twig',
            [
                'form' => $form->createView(),
                'error' => $error,
            ]
        ));
    }
}