]> BookStack Code Mirror - bookstack/commitdiff
Merge pull request #1505 from timoschwarzer/hide-permissions-table-unless-enabled
authorDan Brown <redacted>
Tue, 25 Jun 2019 20:52:52 +0000 (21:52 +0100)
committerGitHub <redacted>
Tue, 25 Jun 2019 20:52:52 +0000 (21:52 +0100)
Hide permissions table unless custom permissions are enabled

.env.example.complete
app/Uploads/AttachmentService.php
app/Uploads/ImageService.php
config/debugbar.php [new file with mode: 0644]
config/filesystems.php
phpunit.xml
tests/Unit/ConfigTest.php [new file with mode: 0644]
tests/Uploads/ImageTest.php

index 37421a419e5485c3f4e6d612bf08236e3a0f2159..829a7509b2a3fa31229017180f776e2347679adb 100644 (file)
@@ -95,6 +95,16 @@ QUEUE_DRIVER=sync
 # Can be 'local', 'local_secure' or 's3'
 STORAGE_TYPE=local
 
+# Image storage system to use
+# Defaults to the value of STORAGE_TYPE if unset.
+# Accepts the same values as STORAGE_TYPE.
+STORAGE_IMAGE_TYPE=local
+
+# Attachment storage system to use
+# Defaults to the value of STORAGE_TYPE if unset.
+# Accepts the same values as STORAGE_TYPE although 'local' will be forced to 'local_secure'.
+STORAGE_ATTACHMENT_TYPE=local_secure
+
 # Amazon S3 storage configuration
 STORAGE_S3_KEY=your-s3-key
 STORAGE_S3_SECRET=your-s3-secret
index e613642c4f3dd8699a7c3f0c37b2c5394e468700..6e875a1e7a35c9cec514ccd3e21316ef04980019 100644 (file)
@@ -13,7 +13,7 @@ class AttachmentService extends UploadService
      */
     protected function getStorage()
     {
-        $storageType = config('filesystems.default');
+        $storageType = config('filesystems.attachments');
 
         // Override default location if set to local public to ensure not visible.
         if ($storageType === 'local') {
index 8eefbaf9dd3468521d388addb292c7285ffd9b16..71fd2cd4eab31f5c0f4545cc9c671d95090443f6 100644 (file)
@@ -45,9 +45,9 @@ class ImageService extends UploadService
      */
     protected function getStorage($type = '')
     {
-        $storageType = config('filesystems.default');
+        $storageType = config('filesystems.images');
 
-        // Override default location if set to local public to ensure not visible.
+        // Ensure system images (App logo) are uploaded to a public space
         if ($type === 'system' && $storageType === 'local_secure') {
             $storageType = 'local';
         }
@@ -458,7 +458,7 @@ class ImageService extends UploadService
             // Get the standard public s3 url if s3 is set as storage type
             // Uses the nice, short URL if bucket name has no periods in otherwise the longer
             // region-based url will be used to prevent http issues.
-            if ($storageUrl == false && config('filesystems.default') === 's3') {
+            if ($storageUrl == false && config('filesystems.images') === 's3') {
                 $storageDetails = config('filesystems.disks.s3');
                 if (strpos($storageDetails['bucket'], '.') === false) {
                     $storageUrl = 'https://' . $storageDetails['bucket'] . '.s3.amazonaws.com';
diff --git a/config/debugbar.php b/config/debugbar.php
new file mode 100644 (file)
index 0000000..ec942dc
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+
+/**
+ * Debugbar Configuration Options
+ *
+ * Changes to these config files are not supported by BookStack and may break upon updates.
+ * Configuration should be altered via the `.env` file or environment variables.
+ * Do not edit this file unless you're happy to maintain any changes yourself.
+ */
+
+return [
+
+     // Debugbar is enabled by default, when debug is set to true in app.php.
+     // You can override the value by setting enable to true or false instead of null.
+     //
+     // You can provide an array of URI's that must be ignored (eg. 'api/*')
+    'enabled' => env('DEBUGBAR_ENABLED', false),
+    'except' => [
+        'telescope*'
+    ],
+
+
+     // DebugBar stores data for session/ajax requests.
+     // You can disable this, so the debugbar stores data in headers/session,
+     // but this can cause problems with large data collectors.
+     // By default, file storage (in the storage folder) is used. Redis and PDO
+     // can also be used. For PDO, run the package migrations first.
+    'storage' => [
+        'enabled'    => true,
+        'driver'     => 'file', // redis, file, pdo, custom
+        'path'       => storage_path('debugbar'), // For file driver
+        'connection' => null,   // Leave null for default connection (Redis/PDO)
+        'provider'   => '' // Instance of StorageInterface for custom driver
+    ],
+
+     // Vendor files are included by default, but can be set to false.
+     // This can also be set to 'js' or 'css', to only include javascript or css vendor files.
+     // Vendor files are for css: font-awesome (including fonts) and highlight.js (css files)
+     // and for js: jquery and and highlight.js
+     // So if you want syntax highlighting, set it to true.
+     // jQuery is set to not conflict with existing jQuery scripts.
+    'include_vendors' => true,
+
+     // The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors),
+     // you can use this option to disable sending the data through the headers.
+     // Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools.
+
+    'capture_ajax' => true,
+    'add_ajax_timing' => false,
+
+     // When enabled, the Debugbar shows deprecated warnings for Symfony components
+     // in the Messages tab.
+    'error_handler' => false,
+
+     // The Debugbar can emulate the Clockwork headers, so you can use the Chrome
+     // Extension, without the server-side code. It uses Debugbar collectors instead.
+    'clockwork' => false,
+
+     // Enable/disable DataCollectors
+    'collectors' => [
+        'phpinfo'         => true,  // Php version
+        'messages'        => true,  // Messages
+        'time'            => true,  // Time Datalogger
+        'memory'          => true,  // Memory usage
+        'exceptions'      => true,  // Exception displayer
+        'log'             => true,  // Logs from Monolog (merged in messages if enabled)
+        'db'              => true,  // Show database (PDO) queries and bindings
+        'views'           => true,  // Views with their data
+        'route'           => true,  // Current route information
+        'auth'            => true, // Display Laravel authentication status
+        'gate'            => true, // Display Laravel Gate checks
+        'session'         => true,  // Display session data
+        'symfony_request' => true,  // Only one can be enabled..
+        'mail'            => true,  // Catch mail messages
+        'laravel'         => false, // Laravel version and environment
+        'events'          => false, // All events fired
+        'default_request' => false, // Regular or special Symfony request logger
+        'logs'            => false, // Add the latest log messages
+        'files'           => false, // Show the included files
+        'config'          => false, // Display config settings
+        'cache'           => false, // Display cache events
+    ],
+
+     // Configure some DataCollectors
+    'options' => [
+        'auth' => [
+            'show_name' => true,   // Also show the users name/email in the debugbar
+        ],
+        'db' => [
+            'with_params'       => true,   // Render SQL with the parameters substituted
+            'backtrace'         => true,   // Use a backtrace to find the origin of the query in your files.
+            'timeline'          => false,  // Add the queries to the timeline
+            'explain' => [                 // Show EXPLAIN output on queries
+                'enabled' => false,
+                'types' => ['SELECT'],     // ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
+            ],
+            'hints'             => true,    // Show hints for common mistakes
+        ],
+        'mail' => [
+            'full_log' => false
+        ],
+        'views' => [
+            'data' => false,    //Note: Can slow down the application, because the data can be quite large..
+        ],
+        'route' => [
+            'label' => true  // show complete route on bar
+        ],
+        'logs' => [
+            'file' => null
+        ],
+        'cache' => [
+            'values' => true // collect cache values
+        ],
+    ],
+
+     // Inject Debugbar into the response
+     // Usually, the debugbar is added just before </body>, by listening to the
+     // Response after the App is done. If you disable this, you have to add them
+     // in your template yourself. See http://phpdebugbar.com/docs/rendering.html
+    'inject' => true,
+
+     // DebugBar route prefix
+     // Sometimes you want to set route prefix to be used by DebugBar to load
+     // its resources from. Usually the need comes from misconfigured web server or
+     // from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97
+    'route_prefix' => '_debugbar',
+
+     // DebugBar route domain
+     // By default DebugBar route served from the same domain that request served.
+     // To override default domain, specify it as a non-empty value.
+    'route_domain' => env('APP_URL', '') === 'http://bookstack.dev' ? '' : env('APP_URL', ''),
+];
index 13198a5052e83b02ad0cf3f939b89229f48a93a0..bd7d28300abae17112857ead07d3d000c4fd823b 100644 (file)
@@ -14,6 +14,12 @@ return [
     // Options: local, local_secure, s3
     'default' => env('STORAGE_TYPE', 'local'),
 
+    // Filesystem to use specifically for image uploads.
+    'images' => env('STORAGE_IMAGE_TYPE', env('STORAGE_TYPE', 'local')),
+
+    // Filesystem to use specifically for file attachments.
+    'attachments' => env('STORAGE_ATTACHMENT_TYPE', env('STORAGE_TYPE', 'local')),
+
     // Storage URL
     // This is the url to where the storage is located for when using an external
     // file storage service, such as s3, to store publicly accessible assets.
index 804afcf5d3ed2ab681792aaffbea10e168a0e1ce..0e51f6af16b375b92fd612353a29306a4e06feef 100644 (file)
@@ -34,6 +34,8 @@
         <env name="AVATAR_URL" value=""/>
         <env name="LDAP_VERSION" value="3"/>
         <env name="STORAGE_TYPE" value="local"/>
+        <env name="ATTACHMENT_STORAGE_TYPE" value="local"/>
+        <env name="IMAGE_STORAGE_TYPE" value="local"/>
         <env name="GITHUB_APP_ID" value="aaaaaaaaaaaaaa"/>
         <env name="GITHUB_APP_SECRET" value="aaaaaaaaaaaaaa"/>
         <env name="GITHUB_AUTO_REGISTER" value=""/>
diff --git a/tests/Unit/ConfigTest.php b/tests/Unit/ConfigTest.php
new file mode 100644 (file)
index 0000000..45f7b07
--- /dev/null
@@ -0,0 +1,54 @@
+<?php namespace Tests;
+
+/**
+ * Class ConfigTest
+ * Many of the tests here are to check on tweaks made
+ * to maintain backwards compatibility.
+ *
+ * @package Tests
+ */
+class ConfigTest extends TestCase
+{
+
+    public function test_filesystem_images_falls_back_to_storage_type_var()
+    {
+        putenv('STORAGE_TYPE=local_secure');
+
+        $this->checkEnvConfigResult('STORAGE_IMAGE_TYPE', 's3', 'filesystems.images', 's3');
+        $this->checkEnvConfigResult('STORAGE_IMAGE_TYPE', null, 'filesystems.images', 'local_secure');
+    }
+
+    public function test_filesystem_attachments_falls_back_to_storage_type_var()
+    {
+        putenv('STORAGE_TYPE=local_secure');
+
+        $this->checkEnvConfigResult('STORAGE_ATTACHMENT_TYPE', 's3', 'filesystems.attachments', 's3');
+        $this->checkEnvConfigResult('STORAGE_ATTACHMENT_TYPE', null, 'filesystems.attachments', 'local_secure');
+    }
+
+    public function test_app_url_blank_if_old_default_value()
+    {
+        $initUrl = 'https://example.com/docs';
+        $oldDefault = 'http://bookstack.dev';
+        $this->checkEnvConfigResult('APP_URL', $initUrl, 'app.url', $initUrl);
+        $this->checkEnvConfigResult('APP_URL', $oldDefault, 'app.url', '');
+    }
+
+    /**
+     * Set an environment variable of the given name and value
+     * then check the given config key to see if it matches the given result.
+     * Providing a null $envVal clears the variable.
+     * @param string $envName
+     * @param string|null $envVal
+     * @param string $configKey
+     * @param string $expectedResult
+     */
+    protected function checkEnvConfigResult(string $envName, $envVal, string $configKey, string $expectedResult)
+    {
+        $envString = $envName . (is_null($envVal) ? '' : '=') . ($envVal ?? '');
+        putenv($envString);
+        $this->refreshApplication();
+        $this->assertEquals($expectedResult, config($configKey));
+    }
+
+}
\ No newline at end of file
index 01bf23d5b2b3ba2ab9a631d9ef151e101ff94ada..f9265337889c94ef7f049159e92da6bb3aada780 100644 (file)
@@ -176,7 +176,7 @@ class ImageTest extends TestCase
 
     public function test_secure_images_uploads_to_correct_place()
     {
-        config()->set('filesystems.default', 'local_secure');
+        config()->set('filesystems.images', 'local_secure');
         $this->asEditor();
         $galleryFile = $this->getTestImage('my-secure-test-upload.png');
         $page = Page::first();
@@ -194,7 +194,7 @@ class ImageTest extends TestCase
 
     public function test_secure_images_included_in_exports()
     {
-        config()->set('filesystems.default', 'local_secure');
+        config()->set('filesystems.images', 'local_secure');
         $this->asEditor();
         $galleryFile = $this->getTestImage('my-secure-test-upload.png');
         $page = Page::first();
@@ -217,7 +217,7 @@ class ImageTest extends TestCase
 
     public function test_system_images_remain_public()
     {
-        config()->set('filesystems.default', 'local_secure');
+        config()->set('filesystems.images', 'local_secure');
         $this->asAdmin();
         $galleryFile = $this->getTestImage('my-system-test-upload.png');
         $expectedPath = public_path('uploads/images/system/' . Date('Y-m') . '/my-system-test-upload.png');