diff --git a/apps/files_external/lib/Controller/GlobalStoragesController.php b/apps/files_external/lib/Controller/GlobalStoragesController.php index e7274c9cfb64c..11fdc352dcbda 100644 --- a/apps/files_external/lib/Controller/GlobalStoragesController.php +++ b/apps/files_external/lib/Controller/GlobalStoragesController.php @@ -8,6 +8,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\Attribute\PasswordConfirmationRequired; @@ -44,6 +45,7 @@ public function __construct( IUserSession $userSession, IGroupManager $groupManager, IConfig $config, + BackendService $backendService, ) { parent::__construct( $AppName, @@ -53,7 +55,8 @@ public function __construct( $logger, $userSession, $groupManager, - $config + $config, + $backendService ); } @@ -82,16 +85,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/StoragesController.php b/apps/files_external/lib/Controller/StoragesController.php index e9b552882ddc8..c3269920c0212 100644 --- a/apps/files_external/lib/Controller/StoragesController.php +++ b/apps/files_external/lib/Controller/StoragesController.php @@ -9,10 +9,12 @@ 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\InsufficientDataForMeaningfulAnswerException; use OCA\Files_External\Lib\StorageConfig; use OCA\Files_External\MountConfig; 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; @@ -48,6 +50,7 @@ public function __construct( protected IUserSession $userSession, protected IGroupManager $groupManager, protected IConfig $config, + private BackendService $backendService, ) { parent::__construct($AppName, $request); } @@ -77,7 +80,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 88a9f936401b0..eff8cac750125 100644 --- a/apps/files_external/lib/Controller/UserGlobalStoragesController.php +++ b/apps/files_external/lib/Controller/UserGlobalStoragesController.php @@ -14,6 +14,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\Attribute\NoAdminRequired; @@ -50,6 +51,7 @@ public function __construct( IUserSession $userSession, IGroupManager $groupManager, IConfig $config, + BackendService $backendService, ) { parent::__construct( $AppName, @@ -59,7 +61,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 7b564d57f7ede..f91e1e0a6f1fe 100644 --- a/apps/files_external/lib/Controller/UserStoragesController.php +++ b/apps/files_external/lib/Controller/UserStoragesController.php @@ -11,6 +11,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\Attribute\NoAdminRequired; @@ -47,6 +48,7 @@ public function __construct( IUserSession $userSession, IGroupManager $groupManager, IConfig $config, + BackendService $backendService, ) { parent::__construct( $AppName, @@ -56,7 +58,8 @@ public function __construct( $logger, $userSession, $groupManager, - $config + $config, + $backendService, ); } @@ -109,15 +112,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, diff --git a/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php b/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php index 74a27eb15e4fb..21182010c9563 100644 --- a/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php +++ b/apps/files_external/tests/Controller/GlobalStoragesControllerTest.php @@ -49,7 +49,8 @@ private function createController(bool $allowCreateLocal = true): GlobalStorages $this->createMock(LoggerInterface::class), $session, $this->createMock(IGroupManager::class), - $config + $config, + $this->backendService, ); } diff --git a/apps/files_external/tests/Controller/StoragesControllerTestCase.php b/apps/files_external/tests/Controller/StoragesControllerTestCase.php index 1eb52f9b459c3..050b3479cd052 100644 --- a/apps/files_external/tests/Controller/StoragesControllerTestCase.php +++ b/apps/files_external/tests/Controller/StoragesControllerTestCase.php @@ -13,10 +13,12 @@ use OCA\Files_External\Lib\Auth\AuthMechanism; use OCA\Files_External\Lib\Auth\NullMechanism; use OCA\Files_External\Lib\Backend\Backend; +use OCA\Files_External\Lib\Backend\Local; use OCA\Files_External\Lib\Backend\SMB; use OCA\Files_External\Lib\StorageConfig; use OCA\Files_External\MountConfig; use OCA\Files_External\NotFoundException; +use OCA\Files_External\Service\BackendService; use OCA\Files_External\Service\GlobalStoragesService; use OCA\Files_External\Service\UserStoragesService; use OCP\AppFramework\Http; @@ -25,10 +27,21 @@ abstract class StoragesControllerTestCase extends \Test\TestCase { protected GlobalStoragesController|UserStoragesController $controller; protected GlobalStoragesService|UserStoragesService|MockObject $service; + protected BackendService|MockObject $backendService; protected function setUp(): void { parent::setUp(); 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 3e8d89ec060c3..138b5e1225dd8 100644 --- a/apps/files_external/tests/Controller/UserStoragesControllerTest.php +++ b/apps/files_external/tests/Controller/UserStoragesControllerTest.php @@ -58,7 +58,8 @@ private function createController(bool $allowCreateLocal = true) { $this->createMock(LoggerInterface::class), $session, $this->createMock(IGroupManager::class), - $config + $config, + $this->backendService, ); }