diff --git a/src/Page.php b/src/Page.php index 8a57666..6040815 100644 --- a/src/Page.php +++ b/src/Page.php @@ -19,6 +19,7 @@ class Page extends Model { $table->string('slug'); $table->string('title'); + $table->string('password')->nullable(); $table->longText('content'); } diff --git a/src/PageController.php b/src/PageController.php index b5c0555..fa52683 100644 --- a/src/PageController.php +++ b/src/PageController.php @@ -21,6 +21,10 @@ class PageController } if ($model = config('pages.model')::find($page)) { + if ($model->password) { + abort_unless(request()->query('password') === $model->password, 403); + } + seo() ->title($model->title) ->description(Str::limit($model->content, 100)); diff --git a/tests/Feature/PagesTest.php b/tests/Feature/PagesTest.php index ba4feca..4a2a85c 100644 --- a/tests/Feature/PagesTest.php +++ b/tests/Feature/PagesTest.php @@ -77,3 +77,16 @@ test('SEO metadata is set on markdown pages', function () { ->assertSee('', false) ->assertSee('', false); }); + +test('pages can be password-protected', function () { + Page::create([ + 'slug' => 'test', + 'title' => 'Test page', + 'password' => 'foo', + 'content' => 'This is a test page' + ]); + + using($this)->get('/test')->assertForbidden(); + using($this)->get('/test?password=bar')->assertForbidden(); + using($this)->get('/test?password=foo')->assertSuccessful()->assertSee('This is a test page'); +}); diff --git a/tests/orbit/content/pages/example.md b/tests/orbit/content/pages/example.md index 86be14b..a8fdeb5 100644 --- a/tests/orbit/content/pages/example.md +++ b/tests/orbit/content/pages/example.md @@ -1,7 +1,7 @@ --- slug: example title: 'Test page' -updated_at: 2021-08-06T02:25:15+00:00 -created_at: 2021-08-06T02:25:15+00:00 +updated_at: 2021-08-08T18:00:46+00:00 +created_at: 2021-08-08T18:00:46+00:00 --- This is a test page \ No newline at end of file diff --git a/tests/orbit/content/pages/test.md b/tests/orbit/content/pages/test.md index 50a9c71..9c9ff23 100644 --- a/tests/orbit/content/pages/test.md +++ b/tests/orbit/content/pages/test.md @@ -1,7 +1,8 @@ --- slug: test title: 'Test page' -updated_at: 2021-08-06T02:25:15+00:00 -created_at: 2021-08-06T02:25:15+00:00 +password: foo +updated_at: 2021-08-08T18:00:46+00:00 +created_at: 2021-08-08T18:00:46+00:00 --- This is a test page \ No newline at end of file