Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2022-03-02 19:11:06 +0300
committerRobin Appelman <robin@icewind.nl>2022-03-04 18:30:03 +0300
commit22875bf367b69db4a76daed1a057407e7fbff2a6 (patch)
treeabcf81d9b06f48ced2c822ac90b849c525e733b6
parent1c468129afa2b2ec4a370a879f8eaffd22768baf (diff)
move logic to decide what to setup to setupmanager
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r--apps/files_external/tests/PersonalMountTest.php4
-rw-r--r--apps/files_sharing/tests/External/ManagerTest.php2
-rw-r--r--lib/private/Files/Mount/Manager.php27
-rw-r--r--lib/private/Files/SetupManager.php48
-rw-r--r--lib/public/Files/Mount/IMountManager.php2
-rw-r--r--tests/lib/Files/Mount/ManagerTest.php4
6 files changed, 46 insertions, 41 deletions
diff --git a/apps/files_external/tests/PersonalMountTest.php b/apps/files_external/tests/PersonalMountTest.php
index fe0e4bc2533..ff33f8e21a7 100644
--- a/apps/files_external/tests/PersonalMountTest.php
+++ b/apps/files_external/tests/PersonalMountTest.php
@@ -30,7 +30,7 @@ use OCA\Files_External\Lib\StorageConfig;
use OCP\Diagnostics\IEventLogger;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Config\IMountProviderCollection;
-use OCP\IUserSession;
+use OCP\IUserManager;
use Test\TestCase;
class PersonalMountTest extends TestCase {
@@ -54,7 +54,7 @@ class PersonalMountTest extends TestCase {
$mountManager = new Manager(
$this->createMock(IEventLogger::class),
$this->createMock(IMountProviderCollection::class),
- $this->createMock(IUserSession::class),
+ $this->createMock(IUserManager::class),
$this->createMock(IEventDispatcher::class)
);
$mountManager->addMount($mount);
diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php
index 30c96ebad6a..b6e9593918c 100644
--- a/apps/files_sharing/tests/External/ManagerTest.php
+++ b/apps/files_sharing/tests/External/ManagerTest.php
@@ -110,7 +110,7 @@ class ManagerTest extends TestCase {
$this->mountManager = new \OC\Files\Mount\Manager(
$this->createMock(IEventLogger::class),
$this->createMock(IMountProviderCollection::class),
- $this->createMock(IUserSession::class),
+ $this->createMock(IUserManager::class),
$this->createMock(IEventDispatcher::class)
);
$this->clientService = $this->getMockBuilder(IClientService::class)
diff --git a/lib/private/Files/Mount/Manager.php b/lib/private/Files/Mount/Manager.php
index 7770b9a6c58..b1506b21864 100644
--- a/lib/private/Files/Mount/Manager.php
+++ b/lib/private/Files/Mount/Manager.php
@@ -31,14 +31,13 @@ namespace OC\Files\Mount;
use OC\Cache\CappedMemoryCache;
use OC\Files\Filesystem;
use OC\Files\SetupManager;
-use OC\Setup;
use OCP\Diagnostics\IEventLogger;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Config\IMountProviderCollection;
use OCP\Files\Mount\IMountManager;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
-use OCP\IUserSession;
+use OCP\IUserManager;
class Manager implements IMountManager {
/** @var MountPoint[] */
@@ -50,12 +49,12 @@ class Manager implements IMountManager {
public function __construct(
IEventLogger $eventLogger,
IMountProviderCollection $mountProviderCollection,
- IUserSession $userSession,
+ IUserManager $userManager,
IEventDispatcher $eventDispatcher
) {
$this->pathCache = new CappedMemoryCache();
$this->inPathCache = new CappedMemoryCache();
- $this->setupManager = new SetupManager($eventLogger, $mountProviderCollection, $this, $userSession, $eventDispatcher);
+ $this->setupManager = new SetupManager($eventLogger, $mountProviderCollection, $this, $userManager, $eventDispatcher);
}
/**
@@ -91,26 +90,14 @@ class Manager implements IMountManager {
$this->inPathCache->clear();
}
- private function setupForFind(string $path) {
- if (strpos($path, '/appdata_' . \OC_Util::getInstanceId()) === 0) {
- // for appdata, we only setup the root bits, not the user bits
- $this->setupManager->setupRoot();
- } elseif (strpos($path, '/files_external/uploads/') === 0) {
- // for OC\Security\CertificateManager, we only setup the root bits, not the user bits
- $this->setupManager->setupRoot();
- } else {
- $this->setupManager->setupForCurrentUser();
- }
- }
-
/**
* Find the mount for $path
*
* @param string $path
- * @return MountPoint|null
+ * @return MountPoint
*/
- public function find(string $path): ?MountPoint {
- $this->setupForFind($path);
+ public function find(string $path): MountPoint {
+ $this->setupManager->setupForPath($path);
$path = Filesystem::normalizePath($path);
if (isset($this->pathCache[$path])) {
@@ -143,7 +130,7 @@ class Manager implements IMountManager {
* @return MountPoint[]
*/
public function findIn(string $path): array {
- $this->setupForFind($path);
+ $this->setupManager->setupForPath($path);
$path = $this->formatPath($path);
if (isset($this->inPathCache[$path])) {
diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php
index 578372775ac..79622132208 100644
--- a/lib/private/Files/SetupManager.php
+++ b/lib/private/Files/SetupManager.php
@@ -43,14 +43,14 @@ use OCP\Files\Mount\IMountManager;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\Storage\IStorage;
use OCP\IUser;
-use OCP\IUserSession;
+use OCP\IUserManager;
class SetupManager {
private bool $rootSetup = false;
private IEventLogger $eventLogger;
private IMountProviderCollection $mountProviderCollection;
private IMountManager $mountManager;
- private IUserSession $userSession;
+ private IUserManager $userManager;
private array $setupUsers = [];
private IEventDispatcher $eventDispatcher;
@@ -58,13 +58,13 @@ class SetupManager {
IEventLogger $eventLogger,
IMountProviderCollection $mountProviderCollection,
IMountManager $mountManager,
- IUserSession $userSession,
+ IUserManager $userManager,
IEventDispatcher $eventDispatcher
) {
$this->eventLogger = $eventLogger;
$this->mountProviderCollection = $mountProviderCollection;
$this->mountManager = $mountManager;
- $this->userSession = $userSession;
+ $this->userManager = $userManager;
$this->eventDispatcher = $eventDispatcher;
}
@@ -138,16 +138,10 @@ class SetupManager {
});
}
- public function setupForCurrentUser() {
- $user = $this->userSession->getUser();
- if ($user) {
- $this->setupForUser($user);
- } else {
- $this->setupRoot();
- }
- }
-
- public function setupForUser(IUser $user) {
+ /**
+ * Setup the full filesystem for the specified user
+ */
+ public function setupForUser(IUser $user): void {
$this->setupRoot();
if (in_array($user->getUID(), $this->setupUsers, true)) {
@@ -172,7 +166,10 @@ class SetupManager {
$this->eventLogger->end('setup_fs');
}
- public function setupRoot() {
+ /**
+ * Set up the root filesystem
+ */
+ public function setupRoot(): void {
//setting up the filesystem twice can only lead to trouble
if ($this->rootSetup) {
return;
@@ -197,6 +194,27 @@ class SetupManager {
$this->eventLogger->end('setup_root_fs');
}
+ /**
+ * Set up the filesystem for the specified path
+ */
+ public function setupForPath(string $path): void {
+ if (substr_count($path, '/') < 2 || strpos($path, '/appdata_' . \OC_Util::getInstanceId()) === 0 || strpos($path, '/files_external/') === 0) {
+ $this->setupRoot();
+ return;
+ } else {
+ [, $userId] = explode('/', $path);
+ }
+
+ $user = $this->userManager->get($userId);
+
+ if (!$user) {
+ $this->setupRoot();
+ return;
+ }
+
+ $this->setupForUser($user);
+ }
+
public function tearDown() {
$this->setupUsers = [];
$this->rootSetup = false;
diff --git a/lib/public/Files/Mount/IMountManager.php b/lib/public/Files/Mount/IMountManager.php
index eb8adc3223a..aa760f53e96 100644
--- a/lib/public/Files/Mount/IMountManager.php
+++ b/lib/public/Files/Mount/IMountManager.php
@@ -63,7 +63,7 @@ interface IMountManager {
* Find the mount for $path
*
* @param string $path
- * @return IMountPoint|null
+ * @return IMountPoint
* @since 8.2.0
*/
public function find(string $path): ?IMountPoint;
diff --git a/tests/lib/Files/Mount/ManagerTest.php b/tests/lib/Files/Mount/ManagerTest.php
index 3fd994edd56..159fffc7cb8 100644
--- a/tests/lib/Files/Mount/ManagerTest.php
+++ b/tests/lib/Files/Mount/ManagerTest.php
@@ -12,7 +12,7 @@ use OC\Files\Storage\Temporary;
use OCP\Diagnostics\IEventLogger;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Config\IMountProviderCollection;
-use OCP\IUserSession;
+use OCP\IUserManager;
class LongId extends Temporary {
public function getId() {
@@ -31,7 +31,7 @@ class ManagerTest extends \Test\TestCase {
$this->manager = new \OC\Files\Mount\Manager(
$this->createMock(IEventLogger::class),
$this->createMock(IMountProviderCollection::class),
- $this->createMock(IUserSession::class),
+ $this->createMock(IUserManager::class),
$this->createMock(IEventDispatcher::class),
);
}