From f6e7ff649efc12faa56fe74378361960b4d64dd1 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Wed, 26 Apr 2023 03:08:20 -0600 Subject: [PATCH] Update ForgotPasswordController, add captcha support, improve security and a new redesigned view --- .../Auth/ForgotPasswordController.php | 45 +++++- .../views/auth/passwords/email.blade.php | 148 +++++++++++++----- 2 files changed, 155 insertions(+), 38 deletions(-) diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index f74df8fa7..618c495e2 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -43,6 +43,8 @@ class ForgotPasswordController extends Controller abort_if(BouncerService::checkIp(request()->ip()), 404); } + usleep(random_int(100000, 300000)); + return view('auth.passwords.email'); } @@ -52,12 +54,51 @@ class ForgotPasswordController extends Controller * @param \Illuminate\Http\Request $request * @return void */ - protected function validateEmail(Request $request) + public function validateEmail(Request $request) { if(config('pixelfed.bouncer.cloud_ips.ban_logins')) { abort_if(BouncerService::checkIp($request->ip()), 404); } - $request->validate(['email' => 'required|email']); + usleep(random_int(100000, 3000000)); + + if(config('captcha.enabled')) { + $rules = [ + 'email' => 'required|email', + 'h-captcha-response' => 'required|captcha' + ]; + } else { + $rules = [ + 'email' => 'required|email' + ]; + } + + $request->validate($rules, [ + 'h-captcha-response' => 'Failed to validate the captcha.', + ]); + } + + /** + * Get the response for a failed password reset link. + * + * @param \Illuminate\Http\Request $request + * @param string $response + * @return \Illuminate\Http\RedirectResponse + * + * @throws \Illuminate\Validation\ValidationException + */ + public function sendResetLinkFailedResponse(Request $request, $response) + { + if ($request->wantsJson()) { + throw ValidationException::withMessages([ + 'email' => [trans($response)], + ]); + } + + return back() + ->withInput($request->only('email')) + ->withErrors([ + 'email' => trans($response), + ]); } } diff --git a/resources/views/auth/passwords/email.blade.php b/resources/views/auth/passwords/email.blade.php index ab2d6985a..d144e142a 100644 --- a/resources/views/auth/passwords/email.blade.php +++ b/resources/views/auth/passwords/email.blade.php @@ -1,47 +1,123 @@ -@extends('layouts.app') +@extends('layouts.blank') + +@push('styles') + + +@endpush @section('content') -
-
-
-
-
{{ __('Reset Password') }}
+
+
+
+
+
+ + + +

Reset Password

+

Send a password reset mail to reset your password

+
-
- @if (session('status') || $errors->has('email')) - -
-
+ + Forgot email? +
+
+
+
@endsection + +@push('scripts') + +@endpush