]> source.dussan.org Git - nextcloud-server.git/commitdiff
Don't inject Bruteforce capability info in the webui 31848/head
authorCarl Schwan <carl@carlschwan.eu>
Tue, 5 Apr 2022 16:32:46 +0000 (18:32 +0200)
committerCarl Schwan <carl@carlschwan.eu>
Thu, 7 Apr 2022 15:33:29 +0000 (17:33 +0200)
This capability do DB access and as far I know is not used by the webui.
This remove one DB query for each page load.

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
lib/composer/composer/autoload_classmap.php
lib/composer/composer/autoload_static.php
lib/private/CapabilitiesManager.php
lib/private/Security/Bruteforce/Capabilities.php
lib/private/Template/JSConfigHelper.php
lib/public/Capabilities/IInitialStateExcludedCapability.php [new file with mode: 0644]

index 2df13618053b6a238f5d3bf8a29f3a158517c1b9..1160a934751aa404b36285309ff77cfc57b1d86c 100644 (file)
@@ -133,6 +133,7 @@ return array(
     'OCP\\Calendar\\Room\\IRoom' => $baseDir . '/lib/public/Calendar/Room/IRoom.php',
     'OCP\\Calendar\\Room\\IRoomMetadata' => $baseDir . '/lib/public/Calendar/Room/IRoomMetadata.php',
     'OCP\\Capabilities\\ICapability' => $baseDir . '/lib/public/Capabilities/ICapability.php',
+    'OCP\\Capabilities\\IInitialStateExcludedCapability' => $baseDir . '/lib/public/Capabilities/IInitialStateExcludedCapability.php',
     'OCP\\Capabilities\\IPublicCapability' => $baseDir . '/lib/public/Capabilities/IPublicCapability.php',
     'OCP\\Collaboration\\AutoComplete\\AutoCompleteEvent' => $baseDir . '/lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php',
     'OCP\\Collaboration\\AutoComplete\\IManager' => $baseDir . '/lib/public/Collaboration/AutoComplete/IManager.php',
index cd5d30b3574350a678d9f6be8bcf9246aa5d4a70..1937f3264ee73c65491e2c376884ae704ca14269 100644 (file)
@@ -162,6 +162,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
         'OCP\\Calendar\\Room\\IRoom' => __DIR__ . '/../../..' . '/lib/public/Calendar/Room/IRoom.php',
         'OCP\\Calendar\\Room\\IRoomMetadata' => __DIR__ . '/../../..' . '/lib/public/Calendar/Room/IRoomMetadata.php',
         'OCP\\Capabilities\\ICapability' => __DIR__ . '/../../..' . '/lib/public/Capabilities/ICapability.php',
+        'OCP\\Capabilities\\IInitialStateExcludedCapability' => __DIR__ . '/../../..' . '/lib/public/Capabilities/IInitialStateExcludedCapability.php',
         'OCP\\Capabilities\\IPublicCapability' => __DIR__ . '/../../..' . '/lib/public/Capabilities/IPublicCapability.php',
         'OCP\\Collaboration\\AutoComplete\\AutoCompleteEvent' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/AutoCompleteEvent.php',
         'OCP\\Collaboration\\AutoComplete\\IManager' => __DIR__ . '/../../..' . '/lib/public/Collaboration/AutoComplete/IManager.php',
index 16f9bd6425283b2559a8768d71fff4354d17fba6..ff92ebb54444892dc4210283751b0b63829ea2cc 100644 (file)
@@ -31,6 +31,7 @@ namespace OC;
 use OCP\AppFramework\QueryException;
 use OCP\Capabilities\ICapability;
 use OCP\Capabilities\IPublicCapability;
+use OCP\Capabilities\IInitialStateExcludedCapability;
 use Psr\Log\LoggerInterface;
 
 class CapabilitiesManager {
@@ -52,7 +53,7 @@ class CapabilitiesManager {
         * @throws \InvalidArgumentException
         * @return array
         */
-       public function getCapabilities(bool $public = false) : array {
+       public function getCapabilities(bool $public = false, bool $initialState = false) : array {
                $capabilities = [];
                foreach ($this->capabilities as $capability) {
                        try {
@@ -66,6 +67,11 @@ class CapabilitiesManager {
 
                        if ($c instanceof ICapability) {
                                if (!$public || $c instanceof IPublicCapability) {
+                                       if ($initialState && ($c instanceof IInitialStateExcludedCapability)) {
+                                               // Remove less important capabilities information that are expensive to query
+                                               // that we would otherwise inject to every page load
+                                               continue;
+                                       }
                                        $capabilities = array_replace_recursive($capabilities, $c->getCapabilities());
                                }
                        } else {
index 3b494d5bf49cc2693f572df0665326128c207530..5de4f35f24ea72c71654815e66ac9ce1161ee51c 100644 (file)
@@ -28,9 +28,10 @@ declare(strict_types=1);
 namespace OC\Security\Bruteforce;
 
 use OCP\Capabilities\IPublicCapability;
+use OCP\Capabilities\IInitialStateExcludedCapability;
 use OCP\IRequest;
 
-class Capabilities implements IPublicCapability {
+class Capabilities implements IPublicCapability, IInitialStateExcludedCapability {
        /** @var IRequest */
        private $request;
 
index abd2ed1dcd8abe8b819ffef4f1ff77f60b165c33..58f3106bafdf4a824e3c712cf7994104b165b55b 100644 (file)
@@ -187,7 +187,7 @@ class JSConfigHelper {
                        $lastConfirmTimestamp = 0;
                }
 
-               $capabilities = $this->capabilitiesManager->getCapabilities();
+               $capabilities = $this->capabilitiesManager->getCapabilities(false, true);
 
                $config = [
                        'session_lifetime' => min($this->config->getSystemValue('session_lifetime', $this->iniWrapper->getNumeric('session.gc_maxlifetime')), $this->iniWrapper->getNumeric('session.gc_maxlifetime')),
diff --git a/lib/public/Capabilities/IInitialStateExcludedCapability.php b/lib/public/Capabilities/IInitialStateExcludedCapability.php
new file mode 100644 (file)
index 0000000..db1c42f
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2022 Carl Schwan <carl@carlschwan.eu>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCP\Capabilities;
+
+/**
+ * Indicate that a capability should not be injected in the initial state
+ * of the page as it might be expensive to query and not useful for the
+ * webui.
+ *
+ * @since 24.0.0
+ */
+interface IInitialStateExcludedCapability {
+}