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 | 152 +++++++++++++----- 2 files changed, 157 insertions(+), 40 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') }}
- -
- @if (session('status') || $errors->has('email')) -
- {{ session('status') ?? $errors->first('email') }} -
- @endif + +
+
@endsection + +@push('scripts') + +@endpush