Spaces:
No application file
No application file
namespace Mautic\UserBundle\Controller; | |
use Mautic\CoreBundle\Controller\FormController; | |
use Mautic\UserBundle\Entity\User; | |
use Mautic\UserBundle\Form\Type\PasswordResetConfirmType; | |
use Mautic\UserBundle\Form\Type\PasswordResetType; | |
use Mautic\UserBundle\Model\UserModel; | |
use Symfony\Component\HttpFoundation\Request; | |
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; | |
class PublicController extends FormController | |
{ | |
/** | |
* Generates a new password for the user and emails it to them. | |
*/ | |
public function passwordResetAction(Request $request): \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response | |
{ | |
/** @var UserModel $model */ | |
$model = $this->getModel('user'); | |
$data = ['identifier' => '']; | |
$action = $this->generateUrl('mautic_user_passwordreset'); | |
$form = $this->formFactory->create(PasswordResetType::class, $data, ['action' => $action]); | |
// /Check for a submitted form and process it | |
if ('POST' === $request->getMethod()) { | |
if ($isValid = $this->isFormValid($form)) { | |
// find the user | |
$data = $form->getData(); | |
$user = $model->getRepository()->findByIdentifier($data['identifier']); | |
try { | |
if (null !== $user) { | |
$model->sendResetEmail($user); | |
} | |
$this->addFlashMessage('mautic.user.user.notice.passwordreset'); | |
} catch (\Exception) { | |
$this->addFlashMessage('mautic.user.user.notice.passwordreset.error', [], 'error'); | |
} | |
return $this->redirectToRoute('login'); | |
} | |
} | |
return $this->delegateView([ | |
'viewParameters' => [ | |
'form' => $form->createView(), | |
], | |
'contentTemplate' => '@MauticUser/Security/reset.html.twig', | |
'passthroughVars' => [ | |
'route' => $action, | |
], | |
]); | |
} | |
public function passwordResetConfirmAction(Request $request, UserPasswordHasherInterface $hasher): mixed | |
{ | |
/** @var UserModel $model */ | |
$model = $this->getModel('user'); | |
$data = ['identifier' => '', 'password' => '', 'password_confirm' => '']; | |
$action = $this->generateUrl('mautic_user_passwordresetconfirm'); | |
$form = $this->formFactory->create(PasswordResetConfirmType::class, [], ['action' => $action]); | |
$token = $request->query->get('token'); | |
if ($token) { | |
$request->getSession()->set('resetToken', $token); | |
} | |
// /Check for a submitted form and process it | |
if ('POST' === $request->getMethod()) { | |
if ($isValid = $this->isFormValid($form)) { | |
// find the user | |
$data = $form->getData(); | |
/** @var User $user */ | |
$user = $model->getRepository()->findByIdentifier($data['identifier']); | |
if (null == $user) { | |
$this->addFlashMessage('mautic.user.user.notice.passwordreset.success'); | |
return $this->redirectToRoute('login'); | |
} else { | |
if ($request->getSession()->has('resetToken')) { | |
$resetToken = $request->getSession()->get('resetToken'); | |
if ($model->confirmResetToken($user, $resetToken)) { | |
$encodedPassword = $model->checkNewPassword($user, $hasher, $data['plainPassword']); | |
$user->setPassword($encodedPassword); | |
$model->saveEntity($user); | |
$this->addFlashMessage('mautic.user.user.notice.passwordreset.success'); | |
$request->getSession()->remove('resetToken'); | |
return $this->redirectToRoute('login'); | |
} | |
return $this->delegateView([ | |
'viewParameters' => [ | |
'form' => $form->createView(), | |
], | |
'contentTemplate' => '@MauticUser/Security/resetconfirm.html.twig', | |
'passthroughVars' => [ | |
'route' => $action, | |
], | |
]); | |
} else { | |
$this->addFlashMessage('mautic.user.user.notice.passwordreset.missingtoken'); | |
return $this->redirectToRoute('mautic_user_passwordresetconfirm'); | |
} | |
} | |
} | |
} | |
return $this->delegateView([ | |
'viewParameters' => [ | |
'form' => $form->createView(), | |
], | |
'contentTemplate' => '@MauticUser/Security/resetconfirm.html.twig', | |
'passthroughVars' => [ | |
'route' => $action, | |
], | |
]); | |
} | |
} | |