Skip to content
Snippets Groups Projects

Issue #3182013 by mably: Integration with Password policy module

Files
4
@@ -2,11 +2,21 @@
namespace Drupal\prlp\Controller;
use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\Flood\FloodInterface;
use Drupal\Core\Form\FormState;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\Url;
use Drupal\prlp\Event\PrlpPasswordBeforeSaveEvent;
use Drupal\prlp\Event\PrlpPasswordValidateEvent;
use Drupal\prlp\PrlpEvents;
use Drupal\user\Controller\UserController;
use Drupal\user\Form\UserPasswordResetForm;
use Drupal\user\UserDataInterface;
use Drupal\user\UserStorageInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
@@ -16,6 +26,53 @@ use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
*/
class PrlpController extends UserController {
/**
* Event dispatcher service.
*/
protected EventDispatcherInterface $eventDispatcher;
/**
* Constructs a PrlpController object.
*
* @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
* The date formatter service.
* @param \Drupal\user\UserStorageInterface $user_storage
* The user storage.
* @param \Drupal\user\UserDataInterface $user_data
* The user data service.
* @param \Psr\Log\LoggerInterface $logger
* A logger instance.
* @param \Drupal\Core\Flood\FloodInterface $flood
* The flood service.
* @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
* The event dispatcher service.
*/
public function __construct(
DateFormatterInterface $date_formatter,
UserStorageInterface $user_storage,
UserDataInterface $user_data,
LoggerInterface $logger,
FloodInterface $flood,
EventDispatcherInterface $event_dispatcher,
) {
parent::__construct($date_formatter, $user_storage, $user_data, $logger, $flood);
$this->eventDispatcher = $event_dispatcher;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('date.formatter'),
$container->get('entity_type.manager')->getStorage('user'),
$container->get('user.data'),
$container->get('logger.factory')->get('user'),
$container->get('flood'),
$container->get('event_dispatcher')
);
}
/**
* Override resetPassLogin() to redirect to the configured path.
*
@@ -54,6 +111,11 @@ class PrlpController extends UserController {
$hash,
]));
// Dispatch password validate event to listeners.
$event = new PrlpPasswordValidateEvent($form_state, $user);
$this->eventDispatcher->dispatch(
$event, PrlpEvents::PASSWORD_VALIDATE);
// The form tries to redirect and returns an error due to this. Catch
// the error in order to use the form state.
try {
@@ -92,6 +154,11 @@ class PrlpController extends UserController {
$pass = is_array($passwords) ? reset($passwords) : NULL;
if (!empty($pass)) {
$user->setPassword($pass);
$event = new PrlpPasswordBeforeSaveEvent($user);
$this->eventDispatcher->dispatch(
$event, PrlpEvents::PASSWORD_BEFORE_SAVE);
$user->save();
$this->messenger()->deleteByType(MessengerInterface::TYPE_STATUS);
$this->messenger()->addStatus($this->t('Your new password has been saved.'));
Loading