urlGenerator->linkToRouteAbsolute('core.login.showLoginForm')); } #[PublicPage] #[NoCSRFRequired] #[UseSession] public function showRenewPasswordForm(string $user): TemplateResponse|RedirectResponse { if (!$this->userConfig->getValueBool($user, 'user_ldap', 'needsPasswordReset')) { return new RedirectResponse($this->urlGenerator->linkToRouteAbsolute('core.login.showLoginForm')); } $parameters = []; $renewPasswordMessages = $this->session->get('renewPasswordMessages'); $errors = []; $messages = []; if (is_array($renewPasswordMessages)) { [$errors, $messages] = $renewPasswordMessages; } $this->session->remove('renewPasswordMessages'); foreach ($errors as $value) { $parameters[$value] = true; } $parameters['messages'] = $messages; $parameters['user'] = $user; $parameters['canResetPassword'] = true; $parameters['resetPasswordLink'] = $this->config->getSystemValue('lost_password_link', ''); if (!$parameters['resetPasswordLink']) { $userObj = $this->userManager->get($user); if ($userObj instanceof IUser) { $parameters['canResetPassword'] = $userObj->canChangePassword(); } } $parameters['cancelLink'] = $this->urlGenerator->linkToRouteAbsolute('core.login.showLoginForm'); return new TemplateResponse( $this->appName, 'renewpassword', $parameters, 'guest' ); } #[PublicPage] #[UseSession] public function tryRenewPassword(?string $user, string $oldPassword, ?string $newPassword): RedirectResponse { if ($user !== null && !$this->userConfig->getValueBool($user, 'user_ldap', 'needsPasswordReset')) { return new RedirectResponse($this->urlGenerator->linkToRouteAbsolute('core.login.showLoginForm')); } $args = !is_null($user) ? ['user' => $user] : []; $loginResult = $this->userManager->checkPassword($user, $oldPassword); if ($loginResult === false) { $this->session->set('renewPasswordMessages', [ ['invalidpassword'], [] ]); return new RedirectResponse($this->urlGenerator->linkToRoute('user_ldap.renewPassword.showRenewPasswordForm', $args)); } try { if (!is_null($newPassword) && \OC_User::setPassword($user, $newPassword)) { $this->session->set('loginMessages', [ [], [$this->l10n->t('Please login with the new password')] ]); $this->userConfig->setValueBool($user, 'user_ldap', 'needsPasswordReset', false); return new RedirectResponse($this->urlGenerator->linkToRoute('core.login.showLoginForm', $args)); } else { $this->session->set('renewPasswordMessages', [ ['internalexception'], [] ]); } } catch (HintException $e) { $this->session->set('renewPasswordMessages', [ [], [$e->getHint()] ]); } return new RedirectResponse($this->urlGenerator->linkToRoute('user_ldap.renewPassword.showRenewPasswordForm', $args)); } #[PublicPage] #[NoCSRFRequired] #[UseSession] public function showLoginFormInvalidPassword(?string $user): RedirectResponse { $args = !is_null($user) ? ['user' => $user] : []; $this->session->set('loginMessages', [ ['invalidpassword'], [] ]); return new RedirectResponse($this->urlGenerator->linkToRoute('core.login.showLoginForm', $args)); } }