diff --git a/app/Http/Controllers/Auth/ConfirmationController.php b/app/Http/Controllers/Auth/ConfirmationController.php new file mode 100644 index 0000000000..4e50529dd4 --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmationController.php @@ -0,0 +1,82 @@ +data; + $time = Preferences::get('user_confirmed_last_mail', 0)->data; + $now = time(); + $maxDiff = Config::get('firefly.confirmation_age'); + + if ($database === $code && ($now - $time <= $maxDiff)) { + Preferences::setForUser(Auth::user(), 'user_confirmed', true); + Preferences::setForUser(Auth::user(), 'user_confirmed_confirmed', time()); + Session::flash('success', strval(trans('firefly.account_is_confirmed'))); + + return redirect(route('home')); + } else { + throw new FireflyException(trans('firefly.invalid_activation_code')); + } + } + + /** + * @param Request $request + */ + public function resendConfirmation(Request $request) + { + $time = Preferences::get('user_confirmed_last_mail', 0)->data; + $now = time(); + $maxDiff = Config::get('firefly.resend_confirmation'); + $owner = env('SITE_OWNER', 'mail@example.com'); + if ($now - $time > $maxDiff) { + + event(new ResendConfirmation(Auth::user(), $request->ip())); + + return view('auth.confirmation.resent', ['owner' => $owner]); + } else { + return view('auth.confirmation.no-resent', ['owner' => $owner]); + } + } + +} \ No newline at end of file diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index d5d719d6f3..178677fd06 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -7,6 +7,8 @@ use FireflyIII\Http\Middleware\Authenticate; use FireflyIII\Http\Middleware\AuthenticateTwoFactor; use FireflyIII\Http\Middleware\Binder; use FireflyIII\Http\Middleware\EncryptCookies; +use FireflyIII\Http\Middleware\IsConfirmed; +use FireflyIII\Http\Middleware\IsNotConfirmed; use FireflyIII\Http\Middleware\Range; use FireflyIII\Http\Middleware\RedirectIfAuthenticated; use FireflyIII\Http\Middleware\RedirectIfTwoFactorAuthenticated; @@ -60,6 +62,17 @@ class Kernel extends HttpKernel VerifyCsrfToken::class, Authenticate::class, AuthenticateTwoFactor::class, + IsConfirmed::class, + ], + 'web-auth-no-confirm' => [ + EncryptCookies::class, + AddQueuedCookiesToResponse::class, + StartSession::class, + ShareErrorsFromSession::class, + VerifyCsrfToken::class, + Authenticate::class, + AuthenticateTwoFactor::class, + IsNotConfirmed::class, ], 'web-auth-no-two-factor' => [ EncryptCookies::class, @@ -69,6 +82,7 @@ class Kernel extends HttpKernel VerifyCsrfToken::class, Authenticate::class, RedirectIfTwoFactorAuthenticated::class, + IsConfirmed::class, ], 'web-auth-range' => [ EncryptCookies::class, @@ -78,6 +92,7 @@ class Kernel extends HttpKernel VerifyCsrfToken::class, Authenticate::class, AuthenticateTwoFactor::class, + IsConfirmed::class, Range::class, Binder::class, ], diff --git a/app/Http/Middleware/IsConfirmed.php b/app/Http/Middleware/IsConfirmed.php new file mode 100644 index 0000000000..9181bc6e82 --- /dev/null +++ b/app/Http/Middleware/IsConfirmed.php @@ -0,0 +1,57 @@ +guest()) { + if ($request->ajax()) { + return response('Unauthorized.', 401); + } else { + return redirect()->guest('login'); + } + } else { + // user must be logged in, then continue: + $isConfirmed = Preferences::get('user_confirmed', false)->data; + if ($isConfirmed === false) { + + // user account is not confirmed, redirect to + // confirmation page: + return redirect(route('confirmation_error')); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/IsNotConfirmed.php b/app/Http/Middleware/IsNotConfirmed.php new file mode 100644 index 0000000000..ca7f6d482f --- /dev/null +++ b/app/Http/Middleware/IsNotConfirmed.php @@ -0,0 +1,55 @@ +guest()) { + if ($request->ajax()) { + return response('Unauthorized.', 401); + } else { + return redirect()->guest('login'); + } + } else { + // user must be logged in, then continue: + $isConfirmed = Preferences::get('user_confirmed', false)->data; + if ($isConfirmed) { + // user account is confirmed, simply send them home. + return redirect(route('home')); + } + } + + return $next($request); + } +}