Spaces:
No application file
No application file
File size: 5,062 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
<?php
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,
],
]);
}
}
|