From de320f81245bec2d211daa1fd61721230eaa1eb1 Mon Sep 17 00:00:00 2001 From: "Emma C. Hughes" <84008144+emmachughes@users.noreply.github.com> Date: Tue, 14 Nov 2023 09:36:59 +0100 Subject: [PATCH] Use Laravel auth to check for features (#2613) * use authorization system to check for features * revery policy change * fix mistake & test * fix logout with login disabled * fix mistake --- sourcecode/hub/app/Http/Kernel.php | 3 - .../Http/Middleware/ShareFeaturesWithView.php | 30 -------- .../hub/app/Http/Middleware/ToggleFeature.php | 29 -------- .../hub/app/Providers/AuthServiceProvider.php | 28 ++++++++ .../views/components/content-card.blade.php | 71 ++++++++++--------- .../components/navbar/navbar-bottom.blade.php | 22 +++--- .../components/navbar/navbar-top.blade.php | 22 +++--- .../hub/resources/views/login/index.blade.php | 4 +- sourcecode/hub/routes/web.php | 20 ++++-- sourcecode/hub/tests/Feature/UserTest.php | 8 +-- 10 files changed, 111 insertions(+), 126 deletions(-) delete mode 100644 sourcecode/hub/app/Http/Middleware/ShareFeaturesWithView.php delete mode 100644 sourcecode/hub/app/Http/Middleware/ToggleFeature.php diff --git a/sourcecode/hub/app/Http/Kernel.php b/sourcecode/hub/app/Http/Kernel.php index d6a65ae770..9dc3f6a472 100644 --- a/sourcecode/hub/app/Http/Kernel.php +++ b/sourcecode/hub/app/Http/Kernel.php @@ -39,13 +39,11 @@ class Kernel extends HttpKernel \App\Http\Middleware\LtiShareWithView::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, - \App\Http\Middleware\ShareFeaturesWithView::class, \App\Http\Middleware\ContentSecurityPolicy::class, ], 'stateless' => [ \Illuminate\Routing\Middleware\SubstituteBindings::class, - \App\Http\Middleware\ShareFeaturesWithView::class, \App\Http\Middleware\ContentSecurityPolicy::class, ], @@ -68,7 +66,6 @@ class Kernel extends HttpKernel 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, - 'feature' => \App\Http\Middleware\ToggleFeature::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'lti.launch-type' => \App\Http\Middleware\LtiLaunchType::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, diff --git a/sourcecode/hub/app/Http/Middleware/ShareFeaturesWithView.php b/sourcecode/hub/app/Http/Middleware/ShareFeaturesWithView.php deleted file mode 100644 index de9408d9ef..0000000000 --- a/sourcecode/hub/app/Http/Middleware/ShareFeaturesWithView.php +++ /dev/null @@ -1,30 +0,0 @@ -viewFactory->share('features', $this->features); - - return $next($request); - } -} diff --git a/sourcecode/hub/app/Http/Middleware/ToggleFeature.php b/sourcecode/hub/app/Http/Middleware/ToggleFeature.php deleted file mode 100644 index 5458d8d285..0000000000 --- a/sourcecode/hub/app/Http/Middleware/ToggleFeature.php +++ /dev/null @@ -1,29 +0,0 @@ -features->enabled($feature)) { - abort(Response::HTTP_NOT_FOUND, "The '$feature' feature is disabled"); - } - - return $next($request); - } -} diff --git a/sourcecode/hub/app/Providers/AuthServiceProvider.php b/sourcecode/hub/app/Providers/AuthServiceProvider.php index eb1bb7c580..d06696e6f1 100644 --- a/sourcecode/hub/app/Providers/AuthServiceProvider.php +++ b/sourcecode/hub/app/Providers/AuthServiceProvider.php @@ -4,6 +4,7 @@ namespace App\Providers; +use App\Configuration\Features; use App\Models\Content; use App\Models\LtiTool; use App\Models\User; @@ -12,6 +13,8 @@ use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Gate; +use function request; + class AuthServiceProvider extends ServiceProvider { /** @@ -32,5 +35,30 @@ public function boot(): void Gate::define('admin', function (User $user) { return $user->admin ?? false; }); + + Gate::define('login', function (User|null $user) { + $request = request(); + + return !$request->hasPreviousSession() || !$request->session()->has('lti'); + }); + + Gate::define('register', function (User|null $user) { + $features = app()->make(Features::class); + + if (!$features->isSignupEnabled()) { + return false; + } + + $request = request(); + + return !$request->hasPreviousSession() || + !$request->session()->has('lti'); + }); + + Gate::define('reset-password', function (User|null $user) { + $features = app()->make(Features::class); + + return $features->isForgotPasswordEnabled(); + }); } } diff --git a/sourcecode/hub/resources/views/components/content-card.blade.php b/sourcecode/hub/resources/views/components/content-card.blade.php index 4287414267..985f5ad721 100755 --- a/sourcecode/hub/resources/views/components/content-card.blade.php +++ b/sourcecode/hub/resources/views/components/content-card.blade.php @@ -62,41 +62,48 @@ class="btn btn-secondary btn-sm d-none d-md-inline-block me-1" {{ trans('messages.edit-content') }} @endcan -