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