123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- <?php
- namespace OC\Files\Mount;
- use OCP\Files\Config\IHomeMountProvider;
- use OCP\Files\Storage\IStorageFactory;
- use OCP\IConfig;
- use OCP\IUser;
- use Psr\Log\LoggerInterface;
- class ObjectHomeMountProvider implements IHomeMountProvider {
-
- private $config;
-
- public function __construct(IConfig $config) {
- $this->config = $config;
- }
-
- public function getHomeMountForUser(IUser $user, IStorageFactory $loader) {
- $config = $this->getMultiBucketObjectStoreConfig($user);
- if ($config === null) {
- $config = $this->getSingleBucketObjectStoreConfig($user);
- }
- if ($config === null) {
- return null;
- }
- return new MountPoint('\OC\Files\ObjectStore\HomeObjectStoreStorage', '/' . $user->getUID(), $config['arguments'], $loader, null, null, self::class);
- }
-
- private function getSingleBucketObjectStoreConfig(IUser $user) {
- $config = $this->config->getSystemValue('objectstore');
- if (!is_array($config)) {
- return null;
- }
-
- if (empty($config['class'])) {
- \OC::$server->get(LoggerInterface::class)->error('No class given for objectstore', ['app' => 'files']);
- }
- if (!isset($config['arguments'])) {
- $config['arguments'] = [];
- }
-
- $config['arguments']['objectstore'] = new $config['class']($config['arguments']);
- $config['arguments']['user'] = $user;
- return $config;
- }
-
- private function getMultiBucketObjectStoreConfig(IUser $user) {
- $config = $this->config->getSystemValue('objectstore_multibucket');
- if (!is_array($config)) {
- return null;
- }
-
- if (empty($config['class'])) {
- \OC::$server->get(LoggerInterface::class)->error('No class given for objectstore', ['app' => 'files']);
- }
- if (!isset($config['arguments'])) {
- $config['arguments'] = [];
- }
- $bucket = $this->config->getUserValue($user->getUID(), 'homeobjectstore', 'bucket', null);
- if ($bucket === null) {
-
- if (!isset($config['arguments']['bucket'])) {
- $config['arguments']['bucket'] = '';
- }
- $mapper = new \OC\Files\ObjectStore\Mapper($user, $this->config);
- $numBuckets = isset($config['arguments']['num_buckets']) ? $config['arguments']['num_buckets'] : 64;
- $config['arguments']['bucket'] .= $mapper->getBucket($numBuckets);
- $this->config->setUserValue($user->getUID(), 'homeobjectstore', 'bucket', $config['arguments']['bucket']);
- } else {
- $config['arguments']['bucket'] = $bucket;
- }
-
- $config['arguments']['objectstore'] = new $config['class']($config['arguments']);
- $config['arguments']['user'] = $user;
- return $config;
- }
- }
|