/** * @param Request $request * @param array $routeParams * @return \Illuminate\Contracts\View\View */ public function render(Request $request, array $routeParams = []) { $token = array_get($routeParams, 'token'); $token = PasswordToken::findOrFail($token); if ($token->created_at < new DateTime('-1 day')) { throw new InvalidConfirmationTokenException(); } return $this->view->make('flarum::reset')->with('token', $token->id); }
/** * @param Request $request * @param array $routeParams * @return \Zend\Diactoros\Response\RedirectResponse */ public function handle(Request $request, array $routeParams = []) { $input = $request->getParsedBody(); $token = PasswordToken::findOrFail(array_get($input, 'token')); $password = array_get($input, 'password'); $confirmation = array_get($input, 'password_confirmation'); if (!$password || $password !== $confirmation) { return $this->redirectTo('/reset/' . $token->id); // TODO: Use UrlGenerator } $token->user->changePassword($password); $token->user->save(); $token->delete(); return $this->redirectTo('/'); }
/** * @param RequestPasswordReset $command * @return \Flarum\Core\Users\User * @throws ModelNotFoundException */ public function handle(RequestPasswordReset $command) { $user = $this->users->findByEmail($command->email); if (!$user) { throw new ModelNotFoundException(); } $token = PasswordToken::generate($user->id); $token->save(); // TODO: Need to use UrlGenerator, but since this is part of core we // don't know that the forum routes will be loaded. Should the reset // password route be part of core?? $data = ['username' => $user->username, 'url' => Core::url() . '/reset/' . $token->id, 'forumTitle' => $this->settings->get('forum_title')]; $this->mailer->send(['text' => 'flarum::emails.resetPassword'], $data, function (Message $message) use($user) { $message->to($user->email); $message->subject('Reset Your Password'); }); return $user; }