diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index 7d6e12b3fc..1b95f56d44 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -13,7 +13,9 @@ declare(strict_types = 1); namespace FireflyIII\Http\Controllers\Auth; use FireflyIII\Http\Controllers\Controller; +use FireflyIII\User; use Illuminate\Foundation\Auth\SendsPasswordResetEmails; +use Illuminate\Http\Request; /** * Class ForgotPasswordController @@ -33,4 +35,39 @@ class ForgotPasswordController extends Controller parent::__construct(); $this->middleware('guest'); } + + /** + * Send a reset link to the given user. + * + * @param Request $request + * + * @return \Illuminate\Http\RedirectResponse + */ + public function sendResetLinkEmail(Request $request) + { + $this->validate($request, ['email' => 'required|email']); + + // verify if the user is not a demo user. If so, we give him back an error. + $user = User::where('email', $request->get('email'))->first(); + if (!is_null($user) && $user->hasRole('demo')) { + return back()->withErrors( + ['email' => trans('firefly.cannot_reset_demo_user')] + ); + } + + $response = $this->broker()->sendResetLink( + $request->only('email') + ); + + if ($response === Password::RESET_LINK_SENT) { + return back()->with('status', trans($response)); + } + + // If an error was returned by the password broker, we will get this message + // translated so we can notify a user of the problem. We'll redirect back + // to where the users came from so they can attempt this process again. + return back()->withErrors( + ['email' => trans($response)] + ); + } } diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index d53f683541..1fb53a93b5 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -98,6 +98,7 @@ return [ 'left_in_budget_limit' => 'Left to spend according to budgeting', 'cannot_change_demo' => 'You cannot change the password of the demonstration account.', 'cannot_delete_demo' => 'You cannot remove the demonstration account.', + 'cannot_reset_demo_user' => 'You cannot reset the password of the demonstration account', // repeat frequencies: 'repeat_freq_yearly' => 'yearly',