]> BookStack Code Mirror - bookstack/commitdiff
Updated API auth to allow public user if given permission
authorDan Brown <redacted>
Fri, 22 May 2020 21:34:18 +0000 (22:34 +0100)
committerDan Brown <redacted>
Fri, 22 May 2020 21:34:18 +0000 (22:34 +0100)
app/Http/Middleware/ApiAuthenticate.php
tests/Api/ApiDocsTest.php

index 15962b3b00471d1fc55dd2a229824b50319886d6..728057bed175b42a880014b0ecfbd6c3962d2701 100644 (file)
@@ -35,9 +35,9 @@ class ApiAuthenticate
     {
         // Return if the user is already found to be signed in via session-based auth.
         // This is to make it easy to browser the API via browser after just logging into the system.
-        if (signedInUser()) {
+        if (signedInUser() || session()->isStarted()) {
             $this->ensureEmailConfirmedIfRequested();
-            if (!auth()->user()->can('access-api')) {
+            if (!user()->can('access-api')) {
                 throw new ApiAuthException(trans('errors.api_user_no_api_permission'), 403);
             }
             return;
index 3cbcadfa30759d4197bbc8775370b0b954760590..1687c64a17e10a7a5110166d251be7c2721afcf1 100644 (file)
@@ -1,5 +1,6 @@
 <?php namespace Tests\Api;
 
+use BookStack\Auth\User;
 use Tests\TestCase;
 
 class ApiDocsTest extends TestCase
@@ -39,4 +40,19 @@ class ApiDocsTest extends TestCase
             ] ]
         ]);
     }
+
+    public function test_docs_page_visible_by_public_user_if_given_permission()
+    {
+        $this->setSettings(['app-public' => true]);
+        $guest = User::getDefault();
+
+        $this->startSession();
+        $resp = $this->get('/api/docs');
+        $resp->assertStatus(403);
+
+        $this->giveUserPermissions($guest, ['access-api']);
+
+        $resp = $this->get('/api/docs');
+        $resp->assertStatus(200);
+    }
 }
\ No newline at end of file