From 8ff8aa8e69a7aa97c1699f017ad520b433568fb1 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 4 May 2026 18:23:26 +0200 Subject: [PATCH 1/3] fix: remove duplicate 'allow creating local storage' check Signed-off-by: Robin Appelman --- .../lib/Controller/GlobalStoragesController.php | 10 ---------- .../lib/Controller/UserStoragesController.php | 9 --------- 2 files changed, 19 deletions(-) diff --git a/apps/files_external/lib/Controller/GlobalStoragesController.php b/apps/files_external/lib/Controller/GlobalStoragesController.php index 89939640acc8a..00051e6043fc4 100644 --- a/apps/files_external/lib/Controller/GlobalStoragesController.php +++ b/apps/files_external/lib/Controller/GlobalStoragesController.php @@ -100,16 +100,6 @@ public function create( $applicableGroups, $priority ) { - $canCreateNewLocalStorage = $this->config->getSystemValue('files_external_allow_create_new_local', true); - if (!$canCreateNewLocalStorage && $backend === 'local') { - return new DataResponse( - [ - 'message' => $this->l10n->t('Forbidden to manage local mounts') - ], - Http::STATUS_FORBIDDEN - ); - } - $newStorage = $this->createStorage( $mountPoint, $backend, diff --git a/apps/files_external/lib/Controller/UserStoragesController.php b/apps/files_external/lib/Controller/UserStoragesController.php index c0a460fd8e316..e070fed90620e 100644 --- a/apps/files_external/lib/Controller/UserStoragesController.php +++ b/apps/files_external/lib/Controller/UserStoragesController.php @@ -130,15 +130,6 @@ public function create( $backendOptions, $mountOptions ) { - $canCreateNewLocalStorage = $this->config->getSystemValue('files_external_allow_create_new_local', true); - if (!$canCreateNewLocalStorage && $backend === 'local') { - return new DataResponse( - [ - 'message' => $this->l10n->t('Forbidden to manage local mounts') - ], - Http::STATUS_FORBIDDEN - ); - } $newStorage = $this->createStorage( $mountPoint, $backend, From a4fd1874c00b64570c6dcb515dea7a8305e9f0c9 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 4 May 2026 18:35:24 +0200 Subject: [PATCH 2/3] fix: improve check if external storage backend is local Signed-off-by: Robin Appelman --- .../lib/Controller/GlobalStoragesController.php | 7 +++++-- .../lib/Controller/StoragesController.php | 13 +++++++++++-- .../lib/Controller/UserGlobalStoragesController.php | 7 +++++-- .../lib/Controller/UserStoragesController.php | 7 +++++-- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/apps/files_external/lib/Controller/GlobalStoragesController.php b/apps/files_external/lib/Controller/GlobalStoragesController.php index 00051e6043fc4..e6ddde4157203 100644 --- a/apps/files_external/lib/Controller/GlobalStoragesController.php +++ b/apps/files_external/lib/Controller/GlobalStoragesController.php @@ -28,6 +28,7 @@ namespace OCA\Files_External\Controller; use OCA\Files_External\NotFoundException; +use OCA\Files_External\Service\BackendService; use OCA\Files_External\Service\GlobalStoragesService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; @@ -62,7 +63,8 @@ public function __construct( ILogger $logger, IUserSession $userSession, IGroupManager $groupManager, - IConfig $config + IConfig $config, + BackendService $backendService ) { parent::__construct( $AppName, @@ -72,7 +74,8 @@ public function __construct( $logger, $userSession, $groupManager, - $config + $config, + $backendService ); } diff --git a/apps/files_external/lib/Controller/StoragesController.php b/apps/files_external/lib/Controller/StoragesController.php index b82d2a4a4c71f..15a684313c40f 100644 --- a/apps/files_external/lib/Controller/StoragesController.php +++ b/apps/files_external/lib/Controller/StoragesController.php @@ -31,9 +31,11 @@ use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Backend\Backend; use OCA\Files_External\Lib\DefinitionParameter; +use OCA\Files_External\Lib\Backend\Local; use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; use OCA\Files_External\Lib\StorageConfig; use OCA\Files_External\NotFoundException; +use OCA\Files_External\Service\BackendService; use OCA\Files_External\Service\StoragesService; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; @@ -85,6 +87,11 @@ abstract class StoragesController extends Controller { */ protected $config; + /** + * @var BackendService + */ + protected $backendService; + /** * Creates a new storages controller. * @@ -102,7 +109,8 @@ public function __construct( ILogger $logger, IUserSession $userSession, IGroupManager $groupManager, - IConfig $config + IConfig $config, + BackendService $backendService ) { parent::__construct($AppName, $request); $this->l10n = $l10n; @@ -111,6 +119,7 @@ public function __construct( $this->userSession = $userSession; $this->groupManager = $groupManager; $this->config = $config; + $this->backendService = $backendService; } /** @@ -138,7 +147,7 @@ protected function createStorage( $priority = null ) { $canCreateNewLocalStorage = $this->config->getSystemValue('files_external_allow_create_new_local', true); - if (!$canCreateNewLocalStorage && $backend === 'local') { + if (!$canCreateNewLocalStorage && $this->backendService->getBackend($backend) instanceof Local) { return new DataResponse( [ 'message' => $this->l10n->t('Forbidden to manage local mounts') diff --git a/apps/files_external/lib/Controller/UserGlobalStoragesController.php b/apps/files_external/lib/Controller/UserGlobalStoragesController.php index 74424bce006ca..1fe944d19da67 100644 --- a/apps/files_external/lib/Controller/UserGlobalStoragesController.php +++ b/apps/files_external/lib/Controller/UserGlobalStoragesController.php @@ -33,6 +33,7 @@ use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; use OCA\Files_External\Lib\StorageConfig; use OCA\Files_External\NotFoundException; +use OCA\Files_External\Service\BackendService; use OCA\Files_External\Service\UserGlobalStoragesService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; @@ -66,7 +67,8 @@ public function __construct( ILogger $logger, IUserSession $userSession, IGroupManager $groupManager, - IConfig $config + IConfig $config, + BackendService $backendService ) { parent::__construct( $AppName, @@ -76,7 +78,8 @@ public function __construct( $logger, $userSession, $groupManager, - $config + $config, + $backendService, ); } diff --git a/apps/files_external/lib/Controller/UserStoragesController.php b/apps/files_external/lib/Controller/UserStoragesController.php index e070fed90620e..73e3d63a0c009 100644 --- a/apps/files_external/lib/Controller/UserStoragesController.php +++ b/apps/files_external/lib/Controller/UserStoragesController.php @@ -32,6 +32,7 @@ use OCA\Files_External\Lib\Backend\Backend; use OCA\Files_External\Lib\StorageConfig; use OCA\Files_External\NotFoundException; +use OCA\Files_External\Service\BackendService; use OCA\Files_External\Service\UserStoragesService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; @@ -65,7 +66,8 @@ public function __construct( ILogger $logger, IUserSession $userSession, IGroupManager $groupManager, - IConfig $config + IConfig $config, + BackendService $backendService ) { parent::__construct( $AppName, @@ -75,7 +77,8 @@ public function __construct( $logger, $userSession, $groupManager, - $config + $config, + $backendService, ); } From 7b6fa2ca95c7021aab333f908f9aacda4563d9f0 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 19 May 2026 15:26:05 +0200 Subject: [PATCH 3/3] test: adjust tests for updated local backend check Signed-off-by: Robin Appelman --- .../Controller/GlobalStoragesControllerTest.php | 3 ++- .../tests/Controller/StoragesControllerTest.php | 16 ++++++++++++++++ .../Controller/UserStoragesControllerTest.php | 3 ++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php b/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php index 0963cd06f0015..bb700d7ecf9a8 100644 --- a/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php +++ b/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php @@ -68,7 +68,8 @@ private function createController($allowCreateLocal = true) { $this->createMock(ILogger::class), $session, $this->createMock(IGroupManager::class), - $config + $config, + $this->backendService, ); } diff --git a/apps/files_external/tests/Controller/StoragesControllerTest.php b/apps/files_external/tests/Controller/StoragesControllerTest.php index bb9be2f2d4a80..7e9df8a60b216 100644 --- a/apps/files_external/tests/Controller/StoragesControllerTest.php +++ b/apps/files_external/tests/Controller/StoragesControllerTest.php @@ -31,8 +31,10 @@ use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Backend\Backend; +use OCA\Files_External\Lib\Backend\Local; use OCA\Files_External\Lib\StorageConfig; use OCA\Files_External\NotFoundException; +use OCA\Files_External\Service\BackendService; use OCA\Files_External\Service\GlobalStoragesService; use OCP\AppFramework\Http; @@ -47,9 +49,23 @@ abstract class StoragesControllerTest extends \Test\TestCase { * @var GlobalStoragesService */ protected $service; + /** + * @var BackendService|MockObject + */ + protected $backendService; protected function setUp(): void { \OCA\Files_External\MountConfig::$skipTest = true; + + $this->backendService = $this->createMock(BackendService::class); + $this->backendService->method('getBackend') + ->willReturnCallback(function ($identifier) { + if ($identifier === 'local') { + return $this->createMock(Local::class); + } else { + return $this->createMock(Backend::class); + } + }); } protected function tearDown(): void { diff --git a/apps/files_external/tests/Controller/UserStoragesControllerTest.php b/apps/files_external/tests/Controller/UserStoragesControllerTest.php index f4de39fcd2b5e..ef417d36db4bc 100644 --- a/apps/files_external/tests/Controller/UserStoragesControllerTest.php +++ b/apps/files_external/tests/Controller/UserStoragesControllerTest.php @@ -76,7 +76,8 @@ private function createController($allowCreateLocal = true) { $this->createMock(ILogger::class), $session, $this->createMock(IGroupManager::class), - $config + $config, + $this->backendService, ); }