diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index c6389159b8..016be84894 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -80,6 +80,26 @@ class LoginController extends Controller return $this->sendFailedLoginResponse($request, $errorMessage); } + /** + * @param Request $request + * + * @return $this|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + */ + public function logout(Request $request) + { + if (intval(getenv('SANDSTORM')) === 1) { + return view('error')->with('message', strval(trans('firefly.sandstorm_not_available'))); + } + + $this->guard()->logout(); + + $request->session()->flush(); + + $request->session()->regenerate(); + + return redirect('/'); + } + /** * Show the application login form. * diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 7473aa1bb1..9dbce2de32 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -91,7 +91,7 @@ class HomeController extends Controller public function flush(Request $request) { Preferences::mark(); - $request->session()->forget(['start', 'end', 'viewRange', 'range', 'is_custom_range']); + $request->session()->forget(['start', 'end','_previous', 'viewRange', 'range', 'is_custom_range']); Artisan::call('cache:clear'); return redirect(route('index')); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 488a3857cd..289a6924d1 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -21,6 +21,7 @@ use FireflyIII\Http\Middleware\Range; use FireflyIII\Http\Middleware\RedirectIfAuthenticated; use FireflyIII\Http\Middleware\RedirectIfTwoFactorAuthenticated; use FireflyIII\Http\Middleware\Sandstorm; +use FireflyIII\Http\Middleware\StartFireflySession; use FireflyIII\Http\Middleware\VerifyCsrfToken; use Illuminate\Auth\Middleware\AuthenticateWithBasicAuth; use Illuminate\Auth\Middleware\Authorize; @@ -29,7 +30,6 @@ use Illuminate\Foundation\Http\Kernel as HttpKernel; use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode; use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Routing\Middleware\ThrottleRequests; -use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; /** @@ -51,7 +51,6 @@ class Kernel extends HttpKernel = [ 'Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables', 'Illuminate\Foundation\Bootstrap\LoadConfiguration', - //'FireflyIII\Bootstrap\ConfigureLogging', 'Illuminate\Foundation\Bootstrap\HandleExceptions', 'Illuminate\Foundation\Bootstrap\RegisterFacades', 'Illuminate\Foundation\Bootstrap\RegisterProviders', @@ -80,11 +79,11 @@ class Kernel extends HttpKernel // does not check login // does not check 2fa // does not check activation - 'web' => [ + 'web' => [ Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, - StartSession::class, + StartFireflySession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, @@ -92,11 +91,11 @@ class Kernel extends HttpKernel // MUST NOT be logged in. Does not care about 2FA or confirmation. - 'user-not-logged-in' => [ + 'user-not-logged-in' => [ Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, - StartSession::class, + StartFireflySession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, @@ -105,11 +104,11 @@ class Kernel extends HttpKernel // MUST be logged in. // MUST NOT have 2FA // don't care about confirmation: - 'user-logged-in-no-2fa' => [ + 'user-logged-in-no-2fa' => [ Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, - StartSession::class, + StartFireflySession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, @@ -120,11 +119,11 @@ class Kernel extends HttpKernel // MUST be logged in // don't care about 2fa // don't care about confirmation. - 'user-simple-auth' => [ + 'user-simple-auth' => [ Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, - StartSession::class, + StartFireflySession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, @@ -135,11 +134,11 @@ class Kernel extends HttpKernel // MUST have 2fa // MUST be confirmed. // (this group includes the other Firefly middleware) - 'user-full-auth' => [ + 'user-full-auth' => [ Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, - StartSession::class, + StartFireflySession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, @@ -153,11 +152,11 @@ class Kernel extends HttpKernel // MUST be confirmed. // MUST have owner role // (this group includes the other Firefly middleware) - 'admin' => [ + 'admin' => [ Sandstorm::class, EncryptCookies::class, AddQueuedCookiesToResponse::class, - StartSession::class, + StartFireflySession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, diff --git a/app/Http/Middleware/StartFireflySession.php b/app/Http/Middleware/StartFireflySession.php new file mode 100644 index 0000000000..121491118d --- /dev/null +++ b/app/Http/Middleware/StartFireflySession.php @@ -0,0 +1,55 @@ +fullUrl(); + if ($request->method() === 'GET' && $request->route() && !$request->ajax()) { + if (strpos($fullUrl, '/javascript/') === false) { + $session->setPreviousUrl($fullUrl); + } + } + } + +} \ No newline at end of file diff --git a/app/Providers/FireflySessionProvider.php b/app/Providers/FireflySessionProvider.php new file mode 100644 index 0000000000..77eb25f0da --- /dev/null +++ b/app/Providers/FireflySessionProvider.php @@ -0,0 +1,64 @@ +registerSessionManager(); + + $this->registerSessionDriver(); + + $this->app->singleton(StartFireflySession::class); + } + + /** + * Register the session driver instance. + * + * @return void + */ + protected function registerSessionDriver() + { + $this->app->singleton( + 'session.store', function ($app) { + // First, we will create the session manager which is responsible for the + // creation of the various session drivers when they are needed by the + // application instance, and will resolve them on a lazy load basis. + return $app->make('session')->driver(); + } + ); + } + + /** + * Register the session manager instance. + * + * @return void + */ + protected function registerSessionManager() + { + $this->app->singleton( + 'session', function ($app) { + return new SessionManager($app); + } + ); + } +} \ No newline at end of file diff --git a/config/app.php b/config/app.php index a990e181f9..f92541fb61 100644 --- a/config/app.php +++ b/config/app.php @@ -46,7 +46,7 @@ return [ Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, - Illuminate\Session\SessionServiceProvider::class, + FireflyIII\Providers\FireflySessionProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index d54d34d4a6..5bc5ae351d 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -959,4 +959,7 @@ return [ 'import_finished_intro' => 'The import has finished! You can now see the new transactions in Firefly.', 'import_finished_text_without_link' => 'It seems there is no tag that points to all your imported transactions. Please look for your imported data in the menu on the left, under "Transactions".', 'import_finished_text_with_link' => 'You can find a list of your imported transactions on the page of the tag that was created for this import.', + + // sandstorm.io errors and messages: + 'sandstorm_not_available' => 'This function is not available when you are using Firefly III within a Sandstorm.io environment.', ]; diff --git a/resources/views/error.twig b/resources/views/error.twig index 6d5f52c6ab..a41611d4f3 100644 --- a/resources/views/error.twig +++ b/resources/views/error.twig @@ -10,7 +10,12 @@
{{ message |default('General unknown errror') }}
+