You are here

class PrlpController in Password Reset Landing Page (PRLP) 8

Controller routines for prlp routes.

Hierarchy

Expanded class hierarchy of PrlpController

File

src/Controller/PrlpController.php, line 14

Namespace

Drupal\prlp\Controller
View source
class PrlpController extends UserController {

  /**
   * Override resetPassLogin() to redirect to the configured path.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   The request.
   * @param int $uid
   *   User ID of the user requesting reset.
   * @param int $timestamp
   *   The current timestamp.
   * @param string $hash
   *   Login link hash.
   *
   * @return \Symfony\Component\HttpFoundation\RedirectResponse
   *   Returns parent result object.
   */
  public function prlpResetPassLogin(Request $request, $uid, $timestamp, $hash) {
    $response = parent::resetPassLogin($uid, $timestamp, $hash);
    try {

      // Deconstruct the redirect url from the response.
      $parsed_url = parse_url($response
        ->getTargetUrl());
      $response_route = Url::fromUserInput($parsed_url['path']);

      // Check that the response route matches the "success" route from core and
      // if it does apply the password change and update the redirect
      // destination.
      if ($response_route && $response_route
        ->getRouteName() == 'entity.user.edit_form') {
        if ($request->request
          ->has('pass') && ($passwords = $request->request
          ->get('pass'))) {

          // $passwords should be an array, if that's not the case nothing
          // should be done to the user.
          $pass = is_array($passwords) ? reset($passwords) : NULL;
          if (!empty($pass)) {

            /** @var \Drupal\user\UserInterface $user */
            $user = $this->userStorage
              ->load($uid);
            $user
              ->setPassword($pass);
            $user
              ->save();
            $this
              ->messenger()
              ->deleteByType(MessengerInterface::TYPE_STATUS);
            $this
              ->messenger()
              ->addStatus($this
              ->t('Your new password has been saved.'));
          }
        }
        $login_destination = $this
          ->config('prlp.settings')
          ->get('login_destination');
        if (!$login_destination) {
          $login_destination = '/user/%user/edit';
        }
        $login_destination = str_replace('%user', $uid, $login_destination);
        $login_destination = str_replace('%front', $this
          ->config('system.site')
          ->get('page.front'), $login_destination);
        if (substr($login_destination, 0, 1) !== '/') {
          $login_destination = '/' . $login_destination;
        }
        return new RedirectResponse($login_destination);
      }
    } catch (\InvalidArgumentException $exception) {

      // This exception is an edge case scenario thrown by Url::fromUserInput()
      // Should fromUserInput() throw this treat it as a failed authentication
      // and log the user out then clear success messages and add a failure
      // message.
      user_logout();
      $this
        ->messenger()
        ->deleteAll();
      $this
        ->messenger()
        ->addError($this
        ->t('You have tried to use a one-time login link that has either been used or is no longer valid. Please request a new one using the form below.'));
    }
    return $this
      ->redirect('user.pass');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityManager protected property The entity manager.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityManager Deprecated protected function Retrieves the entity manager service.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
ControllerBase::state protected function Returns the state storage service.
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PrlpController::prlpResetPassLogin public function Override resetPassLogin() to redirect to the configured path.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.
UserController::$dateFormatter protected property The date formatter service.
UserController::$flood protected property The flood service.
UserController::$logger protected property A logger instance.
UserController::$userData protected property The user data service.
UserController::$userStorage protected property The user storage.
UserController::confirmCancel public function Confirms cancelling a user account via an email link.
UserController::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
UserController::getResetPassForm public function Returns the user password reset form.
UserController::logout public function Logs the current user out.
UserController::resetPass public function Redirects to the user password reset form.
UserController::resetPassLogin public function Validates user, hash, and timestamp; logs the user in if correct.
UserController::userEditPage public function Redirects users to their profile edit page.
UserController::userPage public function Redirects users to their profile page.
UserController::userTitle public function Route title callback.
UserController::__construct public function Constructs a UserController object.