Provide proper user context from initMountPoints

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl 2019-07-25 09:31:39 +02:00
parent 72aaf2e5fb
commit 30c44e1d24
No known key found for this signature in database
GPG Key ID: 4C614C6ED2CDE6DF
3 changed files with 16 additions and 4 deletions

View File

@ -76,7 +76,7 @@ class ConfigAdapter implements IMountProvider {
*/ */
private function prepareStorageConfig(StorageConfig &$storage, IUser $user) { private function prepareStorageConfig(StorageConfig &$storage, IUser $user) {
foreach ($storage->getBackendOptions() as $option => $value) { foreach ($storage->getBackendOptions() as $option => $value) {
$storage->setBackendOption($option, \OC_Mount_Config::substitutePlaceholdersInConfig($value)); $storage->setBackendOption($option, \OC_Mount_Config::substitutePlaceholdersInConfig($value, $user->getUID()));
} }
$objectStore = $storage->getBackendOption('objectstore'); $objectStore = $storage->getBackendOption('objectstore');

View File

@ -39,6 +39,8 @@ class UserContext {
/** @var IRequest */ /** @var IRequest */
private $request; private $request;
private $user;
public function __construct(IUserSession $session, ShareManager $manager, IRequest $request) { public function __construct(IUserSession $session, ShareManager $manager, IRequest $request) {
$this->session = $session; $this->session = $session;
$this->shareManager = $manager; $this->shareManager = $manager;
@ -49,8 +51,14 @@ class UserContext {
return $this->session; return $this->session;
} }
public function setUser($user): void {
$this->user = $user;
}
protected function getUserId(): ?string { protected function getUserId(): ?string {
if ($this->user !== null) {
return $this->user;
}
if($this->session && $this->session->getUser() !== null) { if($this->session && $this->session->getUser() !== null) {
return $this->session->getUser()->getUID(); return $this->session->getUser()->getUID();
} }

View File

@ -50,6 +50,7 @@ use OCA\Files_External\Service\UserGlobalStoragesService;
use OCP\IUserManager; use OCP\IUserManager;
use OCA\Files_External\Service\GlobalStoragesService; use OCA\Files_External\Service\GlobalStoragesService;
use OCA\Files_External\Service\UserStoragesService; use OCA\Files_External\Service\UserStoragesService;
use OCA\Files_External\Config\UserContext;
/** /**
* Class to configure mount.json globally and for users * Class to configure mount.json globally and for users
@ -107,7 +108,7 @@ class OC_Mount_Config {
$mountPoint = '/'.$uid.'/files'.$storage->getMountPoint(); $mountPoint = '/'.$uid.'/files'.$storage->getMountPoint();
$mountEntry = self::prepareMountPointEntry($storage, false); $mountEntry = self::prepareMountPointEntry($storage, false);
foreach ($mountEntry['options'] as &$option) { foreach ($mountEntry['options'] as &$option) {
$option = self::substitutePlaceholdersInConfig($option); $option = self::substitutePlaceholdersInConfig($option, $uid);
} }
$mountPoints[$mountPoint] = $mountEntry; $mountPoints[$mountPoint] = $mountEntry;
} }
@ -116,7 +117,7 @@ class OC_Mount_Config {
$mountPoint = '/'.$uid.'/files'.$storage->getMountPoint(); $mountPoint = '/'.$uid.'/files'.$storage->getMountPoint();
$mountEntry = self::prepareMountPointEntry($storage, true); $mountEntry = self::prepareMountPointEntry($storage, true);
foreach ($mountEntry['options'] as &$option) { foreach ($mountEntry['options'] as &$option) {
$option = self::substitutePlaceholdersInConfig($uid, $option); $option = self::substitutePlaceholdersInConfig($option, $uid);
} }
$mountPoints[$mountPoint] = $mountEntry; $mountPoints[$mountPoint] = $mountEntry;
} }
@ -215,12 +216,15 @@ class OC_Mount_Config {
* @throws \OCP\AppFramework\QueryException * @throws \OCP\AppFramework\QueryException
* @since 16.0.0 * @since 16.0.0
*/ */
public static function substitutePlaceholdersInConfig($input) { public static function substitutePlaceholdersInConfig($input, $user = null) {
/** @var BackendService $backendService */ /** @var BackendService $backendService */
$backendService = self::$app->getContainer()->query(BackendService::class); $backendService = self::$app->getContainer()->query(BackendService::class);
/** @var IConfigHandler[] $handlers */ /** @var IConfigHandler[] $handlers */
$handlers = $backendService->getConfigHandlers(); $handlers = $backendService->getConfigHandlers();
foreach ($handlers as $handler) { foreach ($handlers as $handler) {
if ($handler instanceof UserContext) {
$handler->setUser($user);
}
$input = $handler->handle($input); $input = $handler->handle($input);
} }
return $input; return $input;