diff options
Diffstat (limited to 'lib/private/Files/Mount/RootMountProvider.php')
-rw-r--r-- | lib/private/Files/Mount/RootMountProvider.php | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/private/Files/Mount/RootMountProvider.php b/lib/private/Files/Mount/RootMountProvider.php new file mode 100644 index 00000000000..5e0c924ad38 --- /dev/null +++ b/lib/private/Files/Mount/RootMountProvider.php @@ -0,0 +1,50 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OC\Files\Mount; + +use OC; +use OC\Files\ObjectStore\ObjectStoreStorage; +use OC\Files\ObjectStore\PrimaryObjectStoreConfig; +use OC\Files\Storage\LocalRootStorage; +use OCP\Files\Config\IRootMountProvider; +use OCP\Files\Storage\IStorageFactory; +use OCP\IConfig; + +class RootMountProvider implements IRootMountProvider { + private PrimaryObjectStoreConfig $objectStoreConfig; + private IConfig $config; + + public function __construct(PrimaryObjectStoreConfig $objectStoreConfig, IConfig $config) { + $this->objectStoreConfig = $objectStoreConfig; + $this->config = $config; + } + + public function getRootMounts(IStorageFactory $loader): array { + $objectStoreConfig = $this->objectStoreConfig->getObjectStoreConfigForRoot(); + + if ($objectStoreConfig) { + return [$this->getObjectStoreRootMount($loader, $objectStoreConfig)]; + } else { + return [$this->getLocalRootMount($loader)]; + } + } + + private function getLocalRootMount(IStorageFactory $loader): MountPoint { + $configDataDirectory = $this->config->getSystemValue('datadirectory', OC::$SERVERROOT . '/data'); + return new MountPoint(LocalRootStorage::class, '/', ['datadir' => $configDataDirectory], $loader, null, null, self::class); + } + + private function getObjectStoreRootMount(IStorageFactory $loader, array $objectStoreConfig): MountPoint { + $arguments = array_merge($objectStoreConfig['arguments'], [ + 'objectstore' => $this->objectStoreConfig->buildObjectStore($objectStoreConfig), + ]); + + return new MountPoint(ObjectStoreStorage::class, '/', $arguments, $loader, null, null, self::class); + } +} |