diff --git a/apps/files_external/lib/Controller/GlobalStoragesController.php b/apps/files_external/lib/Controller/GlobalStoragesController.php index 88e01d740bf06..218e0febb80d3 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\Attribute\PasswordConfirmationRequired; @@ -63,7 +64,8 @@ public function __construct( LoggerInterface $logger, IUserSession $userSession, IGroupManager $groupManager, - IConfig $config + IConfig $config, + BackendService $backendService ) { parent::__construct( $AppName, @@ -73,7 +75,8 @@ public function __construct( $logger, $userSession, $groupManager, - $config + $config, + $backendService ); } @@ -102,16 +105,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 3f09d69706de0..a65d1d48ffc12 100644 --- a/apps/files_external/lib/Controller/StoragesController.php +++ b/apps/files_external/lib/Controller/StoragesController.php @@ -30,9 +30,11 @@ 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\NotFoundException; +use OCA\Files_External\Service\BackendService; use OCA\Files_External\Service\StoragesService; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; @@ -67,7 +69,8 @@ public function __construct( protected LoggerInterface $logger, protected IUserSession $userSession, protected IGroupManager $groupManager, - protected IConfig $config + protected IConfig $config, + private BackendService $backendService ) { parent::__construct($AppName, $request); } @@ -97,7 +100,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 53c88deed10fa..f5fa1866859fd 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\Attribute\NoAdminRequired; @@ -68,7 +69,8 @@ public function __construct( LoggerInterface $logger, IUserSession $userSession, IGroupManager $groupManager, - IConfig $config + IConfig $config, + BackendService $backendService ) { parent::__construct( $AppName, @@ -78,7 +80,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 9a4822a470e4a..58645c847bb93 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\Attribute\NoAdminRequired; @@ -67,7 +68,8 @@ public function __construct( LoggerInterface $logger, IUserSession $userSession, IGroupManager $groupManager, - IConfig $config + IConfig $config, + BackendService $backendService ) { parent::__construct( $AppName, @@ -77,7 +79,8 @@ public function __construct( $logger, $userSession, $groupManager, - $config + $config, + $backendService, ); } @@ -132,15 +135,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 a3c1a7b0daef7..e73d7c4a690a2 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(LoggerInterface::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 fdaf6e2261fdb..c038939153c44 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 OCA\Files_External\Service\UserStoragesService; use OCP\AppFramework\Http; @@ -49,9 +51,23 @@ abstract class StoragesControllerTest extends \Test\TestCase { * @var GlobalStoragesService|UserStoragesService|MockObject */ 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 793a90c527bfa..be0eb466ca4c1 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(LoggerInterface::class), $session, $this->createMock(IGroupManager::class), - $config + $config, + $this->backendService, ); }