diff --git a/apps/files/lib/Command/Mount/ListMounts.php b/apps/files/lib/Command/Mount/ListMounts.php
index 487e769ad2c94..b4abeac5ab8af 100644
--- a/apps/files/lib/Command/Mount/ListMounts.php
+++ b/apps/files/lib/Command/Mount/ListMounts.php
@@ -8,18 +8,17 @@
namespace OCA\Files\Command\Mount;
-use OC\Core\Command\Base;
use OCP\Files\Config\ICachedMountInfo;
use OCP\Files\Config\IMountProviderCollection;
use OCP\Files\Config\IUserMountCache;
use OCP\Files\Mount\IMountPoint;
use OCP\IUserManager;
+use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
-class ListMounts extends Base {
+class ListMounts extends Command {
public function __construct(
private readonly IUserManager $userManager,
private readonly IUserMountCache $userMountCache,
@@ -29,81 +28,52 @@ public function __construct(
}
protected function configure(): void {
- parent::configure();
$this
->setName('files:mount:list')
->setDescription('List of mounts for a user')
- ->addArgument('user', InputArgument::REQUIRED, 'User to list mounts for')
- ->addOption('cached-only', null, InputOption::VALUE_NONE, 'Only return cached mounts, prevents filesystem setup');
+ ->addArgument('user', InputArgument::REQUIRED, 'User to list mounts for');
}
public function execute(InputInterface $input, OutputInterface $output): int {
$userId = $input->getArgument('user');
- $cachedOnly = $input->getOption('cached-only');
$user = $this->userManager->get($userId);
if (!$user) {
$output->writeln("User $userId not found");
return 1;
}
- if ($cachedOnly) {
- $mounts = [];
- } else {
- $mounts = $this->mountProviderCollection->getMountsForUser($user);
- $mounts[] = $this->mountProviderCollection->getHomeMountForUser($user);
- }
- /** @var array $cachedByMountPoint */
- $mountsByMountPoint = array_combine(array_map(fn (IMountPoint $mount) => $mount->getMountPoint(), $mounts), $mounts);
+ $mounts = $this->mountProviderCollection->getMountsForUser($user);
+ $mounts[] = $this->mountProviderCollection->getHomeMountForUser($user);
+ /** @var array $cachedByMountpoint */
+ $mountsByMountpoint = array_combine(array_map(fn (IMountPoint $mount) => $mount->getMountPoint(), $mounts), $mounts);
usort($mounts, fn (IMountPoint $a, IMountPoint $b) => $a->getMountPoint() <=> $b->getMountPoint());
$cachedMounts = $this->userMountCache->getMountsForUser($user);
usort($cachedMounts, fn (ICachedMountInfo $a, ICachedMountInfo $b) => $a->getMountPoint() <=> $b->getMountPoint());
/** @var array $cachedByMountpoint */
- $cachedByMountPoint = array_combine(array_map(fn (ICachedMountInfo $mount) => $mount->getMountPoint(), $cachedMounts), $cachedMounts);
-
- $format = $input->getOption('output');
+ $cachedByMountpoint = array_combine(array_map(fn (ICachedMountInfo $mount) => $mount->getMountPoint(), $cachedMounts), $cachedMounts);
- if ($format === self::OUTPUT_FORMAT_PLAIN) {
- foreach ($mounts as $mount) {
- $output->writeln('' . $mount->getMountPoint() . ': ' . $mount->getStorageId());
- if (isset($cachedByMountPoint[$mount->getMountPoint()])) {
- $cached = $cachedByMountPoint[$mount->getMountPoint()];
- $output->writeln("\t- provider: " . $cached->getMountProvider());
- $output->writeln("\t- storage id: " . $cached->getStorageId());
- $output->writeln("\t- root id: " . $cached->getRootId());
- } else {
- $output->writeln("\tnot registered");
- }
+ foreach ($mounts as $mount) {
+ $output->writeln('' . $mount->getMountPoint() . ': ' . $mount->getStorageId());
+ if (isset($cachedByMountpoint[$mount->getMountPoint()])) {
+ $cached = $cachedByMountpoint[$mount->getMountPoint()];
+ $output->writeln("\t- provider: " . $cached->getMountProvider());
+ $output->writeln("\t- storage id: " . $cached->getStorageId());
+ $output->writeln("\t- root id: " . $cached->getRootId());
+ } else {
+ $output->writeln("\tnot registered");
}
- foreach ($cachedMounts as $cachedMount) {
- if ($cachedOnly || !isset($mountsByMountPoint[$cachedMount->getMountPoint()])) {
- $output->writeln('' . $cachedMount->getMountPoint() . ':');
- if (!$cachedOnly) {
- $output->writeln("\tregistered but no longer provided");
- }
- $output->writeln("\t- provider: " . $cachedMount->getMountProvider());
- $output->writeln("\t- storage id: " . $cachedMount->getStorageId());
- $output->writeln("\t- root id: " . $cachedMount->getRootId());
- }
+ }
+ foreach ($cachedMounts as $cachedMount) {
+ if (!isset($mountsByMountpoint[$cachedMount->getMountPoint()])) {
+ $output->writeln('' . $cachedMount->getMountPoint() . ':');
+ $output->writeln("\tregistered but no longer provided");
+ $output->writeln("\t- provider: " . $cachedMount->getMountProvider());
+ $output->writeln("\t- storage id: " . $cachedMount->getStorageId());
+ $output->writeln("\t- root id: " . $cachedMount->getRootId());
}
- } else {
- $cached = array_map(fn (ICachedMountInfo $cachedMountInfo) => [
- 'mountpoint' => $cachedMountInfo->getMountPoint(),
- 'provider' => $cachedMountInfo->getMountProvider(),
- 'storage_id' => $cachedMountInfo->getStorageId(),
- 'root_id' => $cachedMountInfo->getRootId(),
- ], $cachedMounts);
- $provided = array_map(fn (IMountPoint $cachedMountInfo) => [
- 'mountpoint' => $cachedMountInfo->getMountPoint(),
- 'provider' => $cachedMountInfo->getMountProvider(),
- 'storage_id' => $cachedMountInfo->getStorageId(),
- 'root_id' => $cachedMountInfo->getStorageRootId(),
- ], $mounts);
- $this->writeArrayInOutputFormat($input, $output, array_filter([
- 'cached' => $cached,
- 'provided' => $cachedOnly ? null : $provided,
- ]));
}
+
return 0;
}
diff --git a/apps/files/lib/Service/OwnershipTransferService.php b/apps/files/lib/Service/OwnershipTransferService.php
index 3864710ba3d88..4df53d7d6c4d0 100644
--- a/apps/files/lib/Service/OwnershipTransferService.php
+++ b/apps/files/lib/Service/OwnershipTransferService.php
@@ -19,7 +19,6 @@
use OCA\Files_External\Config\ConfigAdapter;
use OCA\GroupFolders\Mount\GroupMountPoint;
use OCP\Encryption\IManager as IEncryptionManager;
-use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Config\IHomeMountProvider;
use OCP\Files\Config\IUserMountCache;
use OCP\Files\File;
@@ -32,7 +31,6 @@
use OCP\IUserManager;
use OCP\L10N\IFactory;
use OCP\Server;
-use OCP\Share\Events\ShareTransferredEvent;
use OCP\Share\IManager as IShareManager;
use OCP\Share\IShare;
use Symfony\Component\Console\Helper\ProgressBar;
@@ -55,7 +53,6 @@ public function __construct(
private IUserManager $userManager,
private IFactory $l10nFactory,
private IRootFolder $rootFolder,
- private IEventDispatcher $eventDispatcher,
) {
}
@@ -570,23 +567,20 @@ private function restoreShares(
} catch (\Throwable $e) {
$output->writeln('Could not restore share with id ' . $share->getId() . ':' . $e->getMessage() . ' : ' . $e->getTraceAsString() . '');
}
- $this->eventDispatcher->dispatchTyped(new ShareTransferredEvent($share));
$progress->advance();
}
$progress->finish();
$output->writeln('');
}
- private function transferIncomingShares(
- string $sourceUid,
+ private function transferIncomingShares(string $sourceUid,
string $destinationUid,
array $sourceShares,
array $destinationShares,
OutputInterface $output,
string $path,
string $finalTarget,
- bool $move,
- ): void {
+ bool $move): void {
$output->writeln('Restoring incoming shares ...');
$progress = new ProgressBar($output, count($sourceShares));
$prefix = "$destinationUid/files";
@@ -625,11 +619,8 @@ private function transferIncomingShares(
if ($move) {
continue;
}
- $oldMountPoint = $this->getShareMountPoint($destinationUid, $share->getTarget());
- $newMountPoint = $this->getShareMountPoint($destinationUid, $shareTarget);
$share->setTarget($shareTarget);
$this->shareManager->moveShare($share, $destinationUid);
- $this->mountManager->moveMount($oldMountPoint, $newMountPoint);
continue;
}
$this->shareManager->deleteShare($share);
@@ -647,11 +638,8 @@ private function transferIncomingShares(
if ($move) {
continue;
}
- $oldMountPoint = $this->getShareMountPoint($destinationUid, $share->getTarget());
- $newMountPoint = $this->getShareMountPoint($destinationUid, $shareTarget);
$share->setTarget($shareTarget);
$this->shareManager->moveShare($share, $destinationUid);
- $this->mountManager->moveMount($oldMountPoint, $newMountPoint);
continue;
}
} catch (NotFoundException $e) {
@@ -664,8 +652,4 @@ private function transferIncomingShares(
$progress->finish();
$output->writeln('');
}
-
- private function getShareMountPoint(string $uid, string $target): string {
- return '/' . $uid . '/files/' . trim($target, '/') . '/';
- }
}
diff --git a/apps/files_sharing/composer/composer/autoload_classmap.php b/apps/files_sharing/composer/composer/autoload_classmap.php
index 138746aad8f83..6750f63164d97 100644
--- a/apps/files_sharing/composer/composer/autoload_classmap.php
+++ b/apps/files_sharing/composer/composer/autoload_classmap.php
@@ -70,9 +70,7 @@
'OCA\\Files_Sharing\\Listener\\LoadPublicFileRequestAuthListener' => $baseDir . '/../lib/Listener/LoadPublicFileRequestAuthListener.php',
'OCA\\Files_Sharing\\Listener\\LoadSidebarListener' => $baseDir . '/../lib/Listener/LoadSidebarListener.php',
'OCA\\Files_Sharing\\Listener\\ShareInteractionListener' => $baseDir . '/../lib/Listener/ShareInteractionListener.php',
- 'OCA\\Files_Sharing\\Listener\\SharesUpdatedListener' => $baseDir . '/../lib/Listener/SharesUpdatedListener.php',
'OCA\\Files_Sharing\\Listener\\UserAddedToGroupListener' => $baseDir . '/../lib/Listener/UserAddedToGroupListener.php',
- 'OCA\\Files_Sharing\\Listener\\UserHomeSetupListener' => $baseDir . '/../lib/Listener/UserHomeSetupListener.php',
'OCA\\Files_Sharing\\Listener\\UserShareAcceptanceListener' => $baseDir . '/../lib/Listener/UserShareAcceptanceListener.php',
'OCA\\Files_Sharing\\Middleware\\OCSShareAPIMiddleware' => $baseDir . '/../lib/Middleware/OCSShareAPIMiddleware.php',
'OCA\\Files_Sharing\\Middleware\\ShareInfoMiddleware' => $baseDir . '/../lib/Middleware/ShareInfoMiddleware.php',
@@ -99,7 +97,6 @@
'OCA\\Files_Sharing\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php',
'OCA\\Files_Sharing\\ShareBackend\\File' => $baseDir . '/../lib/ShareBackend/File.php',
'OCA\\Files_Sharing\\ShareBackend\\Folder' => $baseDir . '/../lib/ShareBackend/Folder.php',
- 'OCA\\Files_Sharing\\ShareRecipientUpdater' => $baseDir . '/../lib/ShareRecipientUpdater.php',
'OCA\\Files_Sharing\\ShareTargetValidator' => $baseDir . '/../lib/ShareTargetValidator.php',
'OCA\\Files_Sharing\\SharedMount' => $baseDir . '/../lib/SharedMount.php',
'OCA\\Files_Sharing\\SharedStorage' => $baseDir . '/../lib/SharedStorage.php',
diff --git a/apps/files_sharing/composer/composer/autoload_static.php b/apps/files_sharing/composer/composer/autoload_static.php
index 3decf0b9c1acc..922bc6d7fd3a3 100644
--- a/apps/files_sharing/composer/composer/autoload_static.php
+++ b/apps/files_sharing/composer/composer/autoload_static.php
@@ -85,9 +85,7 @@ class ComposerStaticInitFiles_Sharing
'OCA\\Files_Sharing\\Listener\\LoadPublicFileRequestAuthListener' => __DIR__ . '/..' . '/../lib/Listener/LoadPublicFileRequestAuthListener.php',
'OCA\\Files_Sharing\\Listener\\LoadSidebarListener' => __DIR__ . '/..' . '/../lib/Listener/LoadSidebarListener.php',
'OCA\\Files_Sharing\\Listener\\ShareInteractionListener' => __DIR__ . '/..' . '/../lib/Listener/ShareInteractionListener.php',
- 'OCA\\Files_Sharing\\Listener\\SharesUpdatedListener' => __DIR__ . '/..' . '/../lib/Listener/SharesUpdatedListener.php',
'OCA\\Files_Sharing\\Listener\\UserAddedToGroupListener' => __DIR__ . '/..' . '/../lib/Listener/UserAddedToGroupListener.php',
- 'OCA\\Files_Sharing\\Listener\\UserHomeSetupListener' => __DIR__ . '/..' . '/../lib/Listener/UserHomeSetupListener.php',
'OCA\\Files_Sharing\\Listener\\UserShareAcceptanceListener' => __DIR__ . '/..' . '/../lib/Listener/UserShareAcceptanceListener.php',
'OCA\\Files_Sharing\\Middleware\\OCSShareAPIMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/OCSShareAPIMiddleware.php',
'OCA\\Files_Sharing\\Middleware\\ShareInfoMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/ShareInfoMiddleware.php',
@@ -114,7 +112,6 @@ class ComposerStaticInitFiles_Sharing
'OCA\\Files_Sharing\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php',
'OCA\\Files_Sharing\\ShareBackend\\File' => __DIR__ . '/..' . '/../lib/ShareBackend/File.php',
'OCA\\Files_Sharing\\ShareBackend\\Folder' => __DIR__ . '/..' . '/../lib/ShareBackend/Folder.php',
- 'OCA\\Files_Sharing\\ShareRecipientUpdater' => __DIR__ . '/..' . '/../lib/ShareRecipientUpdater.php',
'OCA\\Files_Sharing\\ShareTargetValidator' => __DIR__ . '/..' . '/../lib/ShareTargetValidator.php',
'OCA\\Files_Sharing\\SharedMount' => __DIR__ . '/..' . '/../lib/SharedMount.php',
'OCA\\Files_Sharing\\SharedStorage' => __DIR__ . '/..' . '/../lib/SharedStorage.php',
diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php
index d71bb7e3b034b..084c33b5fed42 100644
--- a/apps/files_sharing/lib/AppInfo/Application.php
+++ b/apps/files_sharing/lib/AppInfo/Application.php
@@ -14,7 +14,6 @@
use OCA\Files\Event\LoadSidebar;
use OCA\Files_Sharing\Capabilities;
use OCA\Files_Sharing\Config\ConfigLexicon;
-use OCA\Files_Sharing\Event\UserShareAccessUpdatedEvent;
use OCA\Files_Sharing\External\Manager;
use OCA\Files_Sharing\External\MountProvider as ExternalMountProvider;
use OCA\Files_Sharing\Helper;
@@ -25,9 +24,7 @@
use OCA\Files_Sharing\Listener\LoadPublicFileRequestAuthListener;
use OCA\Files_Sharing\Listener\LoadSidebarListener;
use OCA\Files_Sharing\Listener\ShareInteractionListener;
-use OCA\Files_Sharing\Listener\SharesUpdatedListener;
use OCA\Files_Sharing\Listener\UserAddedToGroupListener;
-use OCA\Files_Sharing\Listener\UserHomeSetupListener;
use OCA\Files_Sharing\Listener\UserShareAcceptanceListener;
use OCA\Files_Sharing\Middleware\OCSShareAPIMiddleware;
use OCA\Files_Sharing\Middleware\ShareInfoMiddleware;
@@ -49,19 +46,13 @@
use OCP\Files\Events\BeforeDirectFileDownloadEvent;
use OCP\Files\Events\BeforeZipCreatedEvent;
use OCP\Files\Events\Node\BeforeNodeReadEvent;
-use OCP\Files\Events\UserHomeSetupEvent;
-use OCP\Group\Events\BeforeGroupDeletedEvent;
use OCP\Group\Events\GroupChangedEvent;
use OCP\Group\Events\GroupDeletedEvent;
use OCP\Group\Events\UserAddedEvent;
-use OCP\Group\Events\UserRemovedEvent;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IGroup;
-use OCP\Share\Events\BeforeShareDeletedEvent;
use OCP\Share\Events\ShareCreatedEvent;
-use OCP\Share\Events\ShareMovedEvent;
-use OCP\Share\Events\ShareTransferredEvent;
use OCP\User\Events\UserChangedEvent;
use OCP\User\Events\UserDeletedEvent;
use OCP\Util;
@@ -120,18 +111,6 @@ function () use ($c) {
// File request auth
$context->registerEventListener(BeforeTemplateRenderedEvent::class, LoadPublicFileRequestAuthListener::class);
- // Update mounts
- $context->registerEventListener(ShareCreatedEvent::class, SharesUpdatedListener::class);
- $context->registerEventListener(BeforeShareDeletedEvent::class, SharesUpdatedListener::class);
- $context->registerEventListener(ShareTransferredEvent::class, SharesUpdatedListener::class);
- $context->registerEventListener(UserAddedEvent::class, SharesUpdatedListener::class);
- $context->registerEventListener(UserRemovedEvent::class, SharesUpdatedListener::class);
- $context->registerEventListener(BeforeGroupDeletedEvent::class, SharesUpdatedListener::class);
- $context->registerEventListener(GroupDeletedEvent::class, SharesUpdatedListener::class);
- $context->registerEventListener(UserShareAccessUpdatedEvent::class, SharesUpdatedListener::class);
- $context->registerEventListener(ShareMovedEvent::class, SharesUpdatedListener::class);
- $context->registerEventListener(UserHomeSetupEvent::class, UserHomeSetupListener::class);
-
$context->registerConfigLexicon(ConfigLexicon::class);
}
diff --git a/apps/files_sharing/lib/Config/ConfigLexicon.php b/apps/files_sharing/lib/Config/ConfigLexicon.php
index 623d1340f2617..c063153765e26 100644
--- a/apps/files_sharing/lib/Config/ConfigLexicon.php
+++ b/apps/files_sharing/lib/Config/ConfigLexicon.php
@@ -24,8 +24,6 @@ class ConfigLexicon implements ILexicon {
public const SHOW_FEDERATED_AS_INTERNAL = 'show_federated_shares_as_internal';
public const SHOW_FEDERATED_TO_TRUSTED_AS_INTERNAL = 'show_federated_shares_to_trusted_servers_as_internal';
public const EXCLUDE_RESHARE_FROM_EDIT = 'shareapi_exclude_reshare_from_edit';
- public const UPDATE_CUTOFF_TIME = 'update_cutoff_time';
- public const USER_NEEDS_SHARE_REFRESH = 'user_needs_share_refresh';
public function getStrictness(): Strictness {
return Strictness::IGNORE;
@@ -36,14 +34,10 @@ public function getAppConfigs(): array {
new Entry(self::SHOW_FEDERATED_AS_INTERNAL, ValueType::BOOL, false, 'shows federated shares as internal shares', true),
new Entry(self::SHOW_FEDERATED_TO_TRUSTED_AS_INTERNAL, ValueType::BOOL, false, 'shows federated shares to trusted servers as internal shares', true),
new Entry(self::EXCLUDE_RESHARE_FROM_EDIT, ValueType::BOOL, false, 'Exclude reshare permission from "Allow editing" bundled permissions'),
-
- new Entry(self::UPDATE_CUTOFF_TIME, ValueType::FLOAT, 3.0, 'For how how long do we update the share data immediately before switching to only marking the user'),
];
}
public function getUserConfigs(): array {
- return [
- new Entry(self::USER_NEEDS_SHARE_REFRESH, ValueType::BOOL, false, 'whether a user needs to have the receiving share data refreshed for possible changes'),
- ];
+ return [];
}
}
diff --git a/apps/files_sharing/lib/Listener/SharesUpdatedListener.php b/apps/files_sharing/lib/Listener/SharesUpdatedListener.php
deleted file mode 100644
index f8ac348878598..0000000000000
--- a/apps/files_sharing/lib/Listener/SharesUpdatedListener.php
+++ /dev/null
@@ -1,133 +0,0 @@
-
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
-
-namespace OCA\Files_Sharing\Listener;
-
-use OCA\Files_Sharing\AppInfo\Application;
-use OCA\Files_Sharing\Config\ConfigLexicon;
-use OCA\Files_Sharing\Event\UserShareAccessUpdatedEvent;
-use OCA\Files_Sharing\ShareRecipientUpdater;
-use OCP\Config\IUserConfig;
-use OCP\EventDispatcher\Event;
-use OCP\EventDispatcher\IEventListener;
-use OCP\Group\Events\BeforeGroupDeletedEvent;
-use OCP\Group\Events\GroupDeletedEvent;
-use OCP\Group\Events\UserAddedEvent;
-use OCP\Group\Events\UserRemovedEvent;
-use OCP\IAppConfig;
-use OCP\IUser;
-use OCP\Share\Events\BeforeShareDeletedEvent;
-use OCP\Share\Events\ShareCreatedEvent;
-use OCP\Share\Events\ShareMovedEvent;
-use OCP\Share\Events\ShareTransferredEvent;
-use OCP\Share\IManager;
-use Psr\Clock\ClockInterface;
-
-/**
- * Listen to various events that can change what shares a user has access to
- *
- * @psalm-type GroupEvents = UserAddedEvent|UserRemovedEvent|GroupDeletedEvent|BeforeGroupDeletedEvent
- * @template-implements IEventListener
- */
-class SharesUpdatedListener implements IEventListener {
- /**
- * for how long do we update the share date immediately,
- * before just marking the other users
- */
- private float $cutOffMarkTime;
-
- /**
- * The total amount of time we've spent so far processing updates
- */
- private float $updatedTime = 0.0;
-
- public function __construct(
- private readonly IManager $shareManager,
- private readonly ShareRecipientUpdater $shareUpdater,
- private readonly IUserConfig $userConfig,
- private readonly ClockInterface $clock,
- IAppConfig $appConfig,
- ) {
- $this->cutOffMarkTime = $appConfig->getValueFloat(Application::APP_ID, ConfigLexicon::UPDATE_CUTOFF_TIME, 3.0);
- }
-
- public function handle(Event $event): void {
- if ($event instanceof UserShareAccessUpdatedEvent) {
- foreach ($event->getUsers() as $user) {
- $this->updateOrMarkUser($user);
- }
- }
- if ($event instanceof BeforeGroupDeletedEvent) {
- // ensure the group users are loaded before the group is deleted
- $event->getGroup()->getUsers();
- }
- if ($event instanceof GroupDeletedEvent) {
- // so we can iterate them after the group is deleted
- foreach ($event->getGroup()->getUsers() as $user) {
- $this->updateOrMarkUser($user);
- }
- }
- if ($event instanceof UserAddedEvent || $event instanceof UserRemovedEvent) {
- $this->updateOrMarkUser($event->getUser());
- }
- if ($event instanceof ShareCreatedEvent || $event instanceof ShareTransferredEvent) {
- $share = $event->getShare();
- $shareTarget = $share->getTarget();
- foreach ($this->shareManager->getUsersForShare($share) as $user) {
- if ($share->getSharedBy() !== $user->getUID()) {
- $this->markOrRun($user, function () use ($user, $share) {
- $this->shareUpdater->updateForAddedShare($user, $share);
- });
- // Share target validation might have changed the target, restore it for the next user
- $share->setTarget($shareTarget);
- }
- }
- }
- if ($event instanceof ShareMovedEvent) {
- $share = $event->getShare();
- foreach ($this->shareManager->getUsersForShare($share) as $user) {
- $this->markOrRun($user, function () use ($user, $share) {
- $this->shareUpdater->updateForMovedShare($user, $share);
- });
- }
- }
- if ($event instanceof BeforeShareDeletedEvent) {
- $share = $event->getShare();
- foreach ($this->shareManager->getUsersForShare($share) as $user) {
- $this->markOrRun($user, function () use ($user, $share) {
- $this->shareUpdater->updateForDeletedShare($user, $share);
- });
- }
- }
- }
-
- private function markOrRun(IUser $user, callable $callback): void {
- $start = floatval($this->clock->now()->format('U.u'));
- if ($this->cutOffMarkTime === -1.0 || $this->updatedTime < $this->cutOffMarkTime) {
- $callback();
- } else {
- $this->markUserForRefresh($user);
- }
- $end = floatval($this->clock->now()->format('U.u'));
- $this->updatedTime += $end - $start;
- }
-
- private function updateOrMarkUser(IUser $user): void {
- $this->markOrRun($user, function () use ($user) {
- $this->shareUpdater->updateForUser($user);
- });
- }
-
- private function markUserForRefresh(IUser $user): void {
- $this->userConfig->setValueBool($user->getUID(), Application::APP_ID, ConfigLexicon::USER_NEEDS_SHARE_REFRESH, true);
- }
-
- public function setCutOffMarkTime(float|int $cutOffMarkTime): void {
- $this->cutOffMarkTime = (float)$cutOffMarkTime;
- }
-}
diff --git a/apps/files_sharing/lib/Listener/UserHomeSetupListener.php b/apps/files_sharing/lib/Listener/UserHomeSetupListener.php
deleted file mode 100644
index 8886660879fa9..0000000000000
--- a/apps/files_sharing/lib/Listener/UserHomeSetupListener.php
+++ /dev/null
@@ -1,44 +0,0 @@
-
- */
-class UserHomeSetupListener implements IEventListener {
- public function __construct(
- private readonly ShareRecipientUpdater $updater,
- private readonly IUserConfig $userConfig,
- ) {
- }
-
- public function handle(Event $event): void {
- if (!$event instanceof UserHomeSetupEvent) {
- return;
- }
-
- $user = $event->getUser();
- if ($this->userConfig->getValueBool($user->getUID(), Application::APP_ID, ConfigLexicon::USER_NEEDS_SHARE_REFRESH)) {
- $this->updater->updateForUser($user);
- $this->userConfig->setValueBool($user->getUID(), Application::APP_ID, ConfigLexicon::USER_NEEDS_SHARE_REFRESH, false);
- }
- }
-
-}
diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php
index 68202483dbcd4..005bf9caf4212 100644
--- a/apps/files_sharing/lib/MountProvider.php
+++ b/apps/files_sharing/lib/MountProvider.php
@@ -12,7 +12,6 @@
use OC\Files\View;
use OCA\Files_Sharing\Event\ShareMountedEvent;
use OCP\EventDispatcher\IEventDispatcher;
-use OCP\Files\Config\IAuthoritativeMountProvider;
use OCP\Files\Config\IMountProvider;
use OCP\Files\Config\IPartialMountProvider;
use OCP\Files\Mount\IMountManager;
@@ -28,7 +27,7 @@
use function count;
-class MountProvider implements IMountProvider, IAuthoritativeMountProvider, IPartialMountProvider {
+class MountProvider implements IMountProvider, IPartialMountProvider {
/**
* @param IConfig $config
@@ -54,15 +53,6 @@ public function __construct(
* @return IMountPoint[]
*/
public function getMountsForUser(IUser $user, IStorageFactory $loader) {
- return array_values($this->getMountsFromSuperShares($user, $this->getSuperSharesForUser($user), $loader));
- }
-
- /**
- * @param IUser $user
- * @param list $excludeShares
- * @return list}> Tuple of [superShare, groupedShares]
- */
- public function getSuperSharesForUser(IUser $user, array $excludeShares = []): array {
$userId = $user->getUID();
$shares = $this->mergeIterables(
$this->shareManager->getSharedWith($userId, IShare::TYPE_USER, null, -1),
@@ -72,9 +62,17 @@ public function getSuperSharesForUser(IUser $user, array $excludeShares = []): a
$this->shareManager->getSharedWith($userId, IShare::TYPE_DECK, null, -1),
);
- $excludeShareIds = array_map(fn (IShare $share) => $share->getFullId(), $excludeShares);
- $shares = $this->filterShares($shares, $userId, $excludeShareIds);
- return $this->buildSuperShares($shares, $user);
+ $shares = $this->filterShares($shares, $userId);
+ $superShares = $this->buildSuperShares($shares, $user);
+
+ return array_values(
+ $this->getMountsFromSuperShares(
+ $userId,
+ $superShares,
+ $loader,
+ $user,
+ ),
+ );
}
/**
@@ -256,18 +254,18 @@ private function adjustTarget(
}
/**
* @param string $userId
- * @param list}> $superShares
+ * @param array $superShares
* @param IStorageFactory $loader
* @param IUser $user
* @return array IMountPoint indexed by mount point
* @throws Exception
*/
- public function getMountsFromSuperShares(
- IUser $user,
+ private function getMountsFromSuperShares(
+ string $userId,
array $superShares,
IStorageFactory $loader,
+ IUser $user,
): array {
- $userId = $user->getUID();
$allMounts = $this->mountManager->getAll();
$mounts = [];
$view = new View('/' . $userId . '/files');
@@ -295,6 +293,12 @@ public function getMountsFromSuperShares(
}
$shareId = (int)$parentShare->getId();
+ $absMountPoint = '/' . $user->getUID() . '/files/' . trim($parentShare->getTarget(), '/') . '/';
+
+ // after the mountpoint is verified for the first time, only new mountpoints (e.g. groupfolders can overwrite the target)
+ if ($shareId > $maxValidatedShare || isset($allMounts[$absMountPoint])) {
+ $this->shareTargetValidator->verifyMountPoint($user, $parentShare, $allMounts, $groupedShares);
+ }
$mount = new SharedMount(
'\OCA\Files_Sharing\SharedStorage',
@@ -308,6 +312,7 @@ public function getMountsFromSuperShares(
'sharingDisabledForUser' => $sharingDisabledForUser
],
$loader,
+ $view,
$this->eventDispatcher,
$user,
);
@@ -344,16 +349,14 @@ public function getMountsFromSuperShares(
* user has no permissions.
*
* @param iterable $shares
- * @param list $excludeShareIds
* @return iterable
*/
- private function filterShares(iterable $shares, string $userId, array $excludeShareIds = []): iterable {
+ private function filterShares(iterable $shares, string $userId): iterable {
foreach ($shares as $share) {
if (
$share->getPermissions() > 0
&& $share->getShareOwner() !== $userId
&& $share->getSharedBy() !== $userId
- && !in_array($share->getFullId(), $excludeShareIds)
) {
yield $share;
}
@@ -396,7 +399,7 @@ public function getMountsForPath(
$shares = $this->filterShares($shares, $userId);
$superShares = $this->buildSuperShares($shares, $user);
- return $this->getMountsFromSuperShares($user, $superShares, $loader);
+ return $this->getMountsFromSuperShares($userId, $superShares, $loader, $user);
}
/**
diff --git a/apps/files_sharing/lib/Repair/CleanupShareTarget.php b/apps/files_sharing/lib/Repair/CleanupShareTarget.php
index 845e24e036725..d32d5dc21d258 100644
--- a/apps/files_sharing/lib/Repair/CleanupShareTarget.php
+++ b/apps/files_sharing/lib/Repair/CleanupShareTarget.php
@@ -11,9 +11,8 @@
use OC\Files\SetupManager;
use OCA\Files_Sharing\ShareTargetValidator;
use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\Files\Config\ICachedMountInfo;
-use OCP\Files\Config\IUserMountCache;
use OCP\Files\IRootFolder;
+use OCP\Files\Mount\IMountManager;
use OCP\Files\NotFoundException;
use OCP\ICacheFactory;
use OCP\IDBConnection;
@@ -43,7 +42,7 @@ public function __construct(
private readonly ShareTargetValidator $shareTargetValidator,
private readonly IUserManager $userManager,
private readonly SetupManager $setupManager,
- private readonly IUserMountCache $userMountCache,
+ private readonly IMountManager $mountManager,
private readonly IRootFolder $rootFolder,
private readonly LoggerInterface $logger,
private readonly ICacheFactory $cacheFactory,
@@ -86,9 +85,7 @@ public function run(IOutput $output) {
$this->setupManager->tearDown();
$this->setupManager->setupForUser($recipient);
- $mounts = $this->userMountCache->getMountsForUser($recipient);
- $mountPoints = array_map(fn (ICachedMountInfo $mount) => $mount->getMountPoint(), $mounts);
- $userMounts = array_combine($mountPoints, $mounts);
+ $userMounts = $this->mountManager->getAll();
$userFolder = $this->rootFolder->getUserFolder($recipient->getUID());
}
diff --git a/apps/files_sharing/lib/ShareRecipientUpdater.php b/apps/files_sharing/lib/ShareRecipientUpdater.php
deleted file mode 100644
index 62033b7dd0ab2..0000000000000
--- a/apps/files_sharing/lib/ShareRecipientUpdater.php
+++ /dev/null
@@ -1,105 +0,0 @@
-inUpdate[$user->getUID()])) {
- return;
- }
- $this->inUpdate[$user->getUID()] = true;
-
- $cachedMounts = $this->userMountCache->getMountsForUser($user);
- $shareMounts = array_filter($cachedMounts, fn (ICachedMountInfo $mount) => $mount->getMountProvider() === MountProvider::class);
- $mountPoints = array_map(fn (ICachedMountInfo $mount) => $mount->getMountPoint(), $cachedMounts);
- $mountsByPath = array_combine($mountPoints, $cachedMounts);
-
- $shares = $this->shareMountProvider->getSuperSharesForUser($user);
-
- // the share mounts have changed if either the number of shares doesn't matched the number of share mounts
- // or there is a share for which we don't have a mount yet.
- $mountsChanged = count($shares) !== count($shareMounts);
- foreach ($shares as $share) {
- [$parentShare, $groupedShares] = $share;
- $mountPoint = $this->getMountPointFromTarget($user, $parentShare->getTarget());
- $mountKey = $parentShare->getNodeId() . '::' . $mountPoint;
- if (!isset($cachedMounts[$mountKey])) {
- $mountsChanged = true;
- $this->shareTargetValidator->verifyMountPoint($user, $parentShare, $mountsByPath, $groupedShares);
- }
- }
-
- if ($mountsChanged) {
- $newMounts = $this->shareMountProvider->getMountsFromSuperShares($user, $shares, $this->storageFactory);
- $this->userMountCache->registerMounts($user, $newMounts, [MountProvider::class]);
- }
-
- unset($this->inUpdate[$user->getUID()]);
- }
-
- /**
- * Validate a single received share for a user
- */
- public function updateForAddedShare(IUser $user, IShare $share): void {
- $cachedMounts = $this->userMountCache->getMountsForUser($user);
- $mountPoints = array_map(fn (ICachedMountInfo $mount) => $mount->getMountPoint(), $cachedMounts);
- $mountsByPath = array_combine($mountPoints, $cachedMounts);
-
- $target = $this->shareTargetValidator->verifyMountPoint($user, $share, $mountsByPath, [$share]);
- $mountPoint = $this->getMountPointFromTarget($user, $target);
-
- $this->userMountCache->addMount($user, $mountPoint, $share->getNode()->getData(), MountProvider::class);
- }
-
- private function getMountPointFromTarget(IUser $user, string $target): string {
- return '/' . $user->getUID() . '/files/' . trim($target, '/') . '/';
- }
-
- /**
- * Process a single deleted share for a user
- */
- public function updateForDeletedShare(IUser $user, IShare $share): void {
- $this->userMountCache->removeMount($this->getMountPointFromTarget($user, $share->getTarget()));
- }
-
- /**
- * Process a single moved share for a user
- */
- public function updateForMovedShare(IUser $user, IShare $share): void {
- $originalTarget = $share->getOriginalTarget();
- if ($originalTarget != null) {
- $newMountPoint = $this->getMountPointFromTarget($user, $share->getTarget());
- $oldMountPoint = $this->getMountPointFromTarget($user, $originalTarget);
- $this->userMountCache->removeMount($oldMountPoint);
- $this->userMountCache->addMount($user, $newMountPoint, $share->getNode()->getData(), MountProvider::class);
- } else {
- $this->updateForUser($user);
- }
- }
-}
diff --git a/apps/files_sharing/lib/ShareTargetValidator.php b/apps/files_sharing/lib/ShareTargetValidator.php
index 7534cabc33a36..3dbd3877819c4 100644
--- a/apps/files_sharing/lib/ShareTargetValidator.php
+++ b/apps/files_sharing/lib/ShareTargetValidator.php
@@ -13,7 +13,6 @@
use OC\Files\View;
use OCP\Cache\CappedMemoryCache;
use OCP\EventDispatcher\IEventDispatcher;
-use OCP\Files\Config\ICachedMountInfo;
use OCP\Files\Mount\IMountManager;
use OCP\Files\Mount\IMountPoint;
use OCP\IUser;
@@ -47,7 +46,7 @@ private function getViewForUser(IUser $user): View {
/**
* check if the parent folder exists otherwise move the mount point up
*
- * @param array $allCachedMounts Other mounts for the user, indexed by path
+ * @param array $allCachedMounts Other mounts for the user, indexed by path
* @param IShare[] $childShares
* @return string
*/
@@ -106,7 +105,7 @@ public function verifyMountPoint(
/**
- * @param ICachedMountInfo[] $allCachedMounts
+ * @param IMountPoint[] $allCachedMounts
*/
public function generateUniqueTarget(
int $shareNodeId,
@@ -132,7 +131,7 @@ public function generateUniqueTarget(
}
/**
- * @param ICachedMountInfo[] $allCachedMounts
+ * @param IMountPoint[] $allCachedMounts
*/
private function hasConflictingMount(int $shareNodeId, array $allCachedMounts, string $absolutePath): bool {
if (!isset($allCachedMounts[$absolutePath . '/'])) {
@@ -140,7 +139,7 @@ private function hasConflictingMount(int $shareNodeId, array $allCachedMounts, s
}
$mount = $allCachedMounts[$absolutePath . '/'];
- if ($mount->getMountProvider() === MountProvider::class && $mount->getRootId() === $shareNodeId) {
+ if ($mount instanceof SharedMount && $mount->getShare()->getNodeId() === $shareNodeId) {
// "conflicting" mount is a mount for the current share
return false;
}
diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php
index 8759272eb60b5..4dff3bcf3b75b 100644
--- a/apps/files_sharing/lib/SharedMount.php
+++ b/apps/files_sharing/lib/SharedMount.php
@@ -11,6 +11,7 @@
use OC\Files\Filesystem;
use OC\Files\Mount\MountPoint;
use OC\Files\Mount\MoveableMount;
+use OC\Files\View;
use OCA\Files_Sharing\Exceptions\BrokenPath;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Events\InvalidateMountCacheEvent;
@@ -40,6 +41,7 @@ public function __construct(
$storage,
$arguments,
IStorageFactory $loader,
+ private View $recipientView,
private IEventDispatcher $eventDispatcher,
private IUser $user,
) {
@@ -186,8 +188,4 @@ public function getNumericStorageId() {
public function getMountType() {
return 'shared';
}
-
- public function getUser(): IUser {
- return $this->user;
- }
}
diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php
index e0340b3ce0015..40f768ffab495 100644
--- a/apps/files_sharing/tests/ApiTest.php
+++ b/apps/files_sharing/tests/ApiTest.php
@@ -826,8 +826,6 @@ public function testGetShareMultipleSharedFolder(): void {
$share3->setStatus(IShare::STATUS_ACCEPTED);
$this->shareManager->updateShare($share3);
- $this->logout();
-
// $request = $this->createRequest(['path' => $this->subfolder]);
$ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER2);
$result1 = $ocs->getShares('false', 'false', 'false', $this->subfolder);
diff --git a/apps/files_sharing/tests/Repair/CleanupShareTargetTest.php b/apps/files_sharing/tests/Repair/CleanupShareTargetTest.php
index 3e3997d83bda6..8c752c52a0c25 100644
--- a/apps/files_sharing/tests/Repair/CleanupShareTargetTest.php
+++ b/apps/files_sharing/tests/Repair/CleanupShareTargetTest.php
@@ -6,7 +6,6 @@
*/
namespace OCA\Files_Sharing\Tests\Repair;
-use OC\Files\Filesystem;
use OC\Migration\NullOutput;
use OCA\Files_Sharing\Repair\CleanupShareTarget;
use OCA\Files_Sharing\Tests\TestCase;
@@ -50,7 +49,6 @@ private function createUserShare(string $by, string $target = self::TEST_FOLDER_
$share->setTarget($target);
$this->shareManager->moveShare($share, self::TEST_FILES_SHARING_API_USER2);
- Filesystem::getMountManager()->moveMount('/' . self::TEST_FILES_SHARING_API_USER2 . '/files' . self::TEST_FOLDER_NAME . '/', '/' . self::TEST_FILES_SHARING_API_USER2 . '/files' . $target . '/');
$share = $this->shareManager->getShareById($share->getFullId());
$this->assertEquals($target, $share->getTarget());
diff --git a/apps/files_sharing/tests/ShareRecipientUpdaterTest.php b/apps/files_sharing/tests/ShareRecipientUpdaterTest.php
deleted file mode 100644
index 2316e6b8b7e56..0000000000000
--- a/apps/files_sharing/tests/ShareRecipientUpdaterTest.php
+++ /dev/null
@@ -1,206 +0,0 @@
-userMountCache = $this->createMock(IUserMountCache::class);
- $this->shareMountProvider = $this->createMock(MountProvider::class);
- $this->shareTargetValidator = $this->createMock(ShareTargetValidator::class);
- $this->storageFactory = $this->createMock(IStorageFactory::class);
-
- $this->updater = new ShareRecipientUpdater(
- $this->userMountCache,
- $this->shareMountProvider,
- $this->shareTargetValidator,
- $this->storageFactory,
- );
- }
-
- public function testUpdateForShare() {
- $share = $this->createMock(IShare::class);
- $node = $this->createMock(Node::class);
- $cacheEntry = $this->createMock(ICacheEntry::class);
- $share->method('getNode')
- ->willReturn($node);
- $node->method('getData')
- ->willReturn($cacheEntry);
- $user1 = $this->createUser('user1', '');
-
- $this->userMountCache->method('getMountsForUser')
- ->with($user1)
- ->willReturn([]);
-
- $this->shareTargetValidator->method('verifyMountPoint')
- ->with($user1, $share, [], [$share])
- ->willReturn('/new-target');
-
- $this->userMountCache->expects($this->exactly(1))
- ->method('addMount')
- ->with($user1, '/user1/files/new-target/', $cacheEntry, MountProvider::class);
-
- $this->updater->updateForAddedShare($user1, $share);
- }
-
- /**
- * @param IUser $user
- * @param list $mounts
- * @return void
- */
- private function setCachedMounts(IUser $user, array $mounts) {
- $cachedMounts = array_map(function (array $mount): ICachedMountInfo {
- $cachedMount = $this->createMock(ICachedMountInfo::class);
- $cachedMount->method('getRootId')
- ->willReturn($mount['fileid']);
- $cachedMount->method('getMountPoint')
- ->willReturn($mount['mount_point']);
- $cachedMount->method('getMountProvider')
- ->willReturn($mount['provider']);
- return $cachedMount;
- }, $mounts);
- $mountKeys = array_map(function (array $mount): string {
- return $mount['fileid'] . '::' . $mount['mount_point'];
- }, $mounts);
-
- $this->userMountCache->method('getMountsForUser')
- ->with($user)
- ->willReturn(array_combine($mountKeys, $cachedMounts));
- }
-
- public function testUpdateForUserAddedNoExisting() {
- $share = $this->createMock(IShare::class);
- $share->method('getTarget')
- ->willReturn('/target');
- $share->method('getNodeId')
- ->willReturn(111);
- $user1 = $this->createUser('user1', '');
- $newMount = $this->createMock(IMountPoint::class);
-
- $this->shareMountProvider->method('getSuperSharesForUser')
- ->with($user1, [])
- ->willReturn([[
- $share,
- [$share],
- ]]);
-
- $this->shareMountProvider->method('getMountsFromSuperShares')
- ->with($user1, [[
- $share,
- [$share],
- ]], $this->storageFactory)
- ->willReturn([$newMount]);
-
- $this->setCachedMounts($user1, []);
-
- $this->shareTargetValidator->method('verifyMountPoint')
- ->with($user1, $share, [], [$share])
- ->willReturn('/new-target');
-
- $this->userMountCache->expects($this->exactly(1))
- ->method('registerMounts')
- ->with($user1, [$newMount], [MountProvider::class]);
-
- $this->updater->updateForUser($user1);
- }
-
- public function testUpdateForUserNoChanges() {
- $share = $this->createMock(IShare::class);
- $share->method('getTarget')
- ->willReturn('/target');
- $share->method('getNodeId')
- ->willReturn(111);
- $user1 = $this->createUser('user1', '');
-
- $this->shareMountProvider->method('getSuperSharesForUser')
- ->with($user1, [])
- ->willReturn([[
- $share,
- [$share],
- ]]);
-
- $this->setCachedMounts($user1, [
- ['fileid' => 111, 'mount_point' => '/user1/files/target/', 'provider' => MountProvider::class],
- ]);
-
- $this->shareTargetValidator->expects($this->never())
- ->method('verifyMountPoint');
-
- $this->userMountCache->expects($this->never())
- ->method('registerMounts');
-
- $this->updater->updateForUser($user1);
- }
-
- public function testUpdateForUserRemoved() {
- $share = $this->createMock(IShare::class);
- $share->method('getTarget')
- ->willReturn('/target');
- $share->method('getNodeId')
- ->willReturn(111);
- $user1 = $this->createUser('user1', '');
-
- $this->shareMountProvider->method('getSuperSharesForUser')
- ->with($user1, [])
- ->willReturn([]);
-
- $this->setCachedMounts($user1, [
- ['fileid' => 111, 'mount_point' => '/user1/files/target/', 'provider' => MountProvider::class],
- ]);
-
- $this->shareTargetValidator->expects($this->never())
- ->method('verifyMountPoint');
-
- $this->userMountCache->expects($this->exactly(1))
- ->method('registerMounts')
- ->with($user1, [], [MountProvider::class]);
-
- $this->updater->updateForUser($user1);
- }
-
- public function testDeletedShare() {
- $share = $this->createMock(IShare::class);
- $share->method('getTarget')
- ->willReturn('/target');
- $share->method('getNodeId')
- ->willReturn(111);
- $user1 = $this->createUser('user1', '');
-
- $this->shareTargetValidator->expects($this->never())
- ->method('verifyMountPoint');
-
- $this->userMountCache->expects($this->exactly(1))
- ->method('removeMount')
- ->with('/user1/files/target/');
-
- $this->updater->updateForDeletedShare($user1, $share);
- }
-}
diff --git a/apps/files_sharing/tests/ShareTargetValidatorTest.php b/apps/files_sharing/tests/ShareTargetValidatorTest.php
deleted file mode 100644
index 18fcd35ed285c..0000000000000
--- a/apps/files_sharing/tests/ShareTargetValidatorTest.php
+++ /dev/null
@@ -1,141 +0,0 @@
-
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
-
-namespace OCA\Files_Sharing\Tests;
-
-use OCA\Files_Sharing\ShareTargetValidator;
-use OCP\Constants;
-use OCP\Files\Config\ICachedMountInfo;
-use OCP\Files\Folder;
-use OCP\IUser;
-use OCP\Server;
-use OCP\Share\IShare;
-
-#[\PHPUnit\Framework\Attributes\Group('DB')]
-class ShareTargetValidatorTest extends TestCase {
- private ShareTargetValidator $targetValidator;
-
- private IUser $user2;
- protected string $folder2;
-
- protected function setUp(): void {
- parent::setUp();
-
- $this->folder = '/folder_share_storage_test';
- $this->folder2 = '/folder_share_storage_test2';
-
- $this->filename = '/share-api-storage.txt';
-
-
- $this->view->mkdir($this->folder);
- $this->view->mkdir($this->folder2);
-
- // save file with content
- $this->view->file_put_contents($this->filename, 'root file');
- $this->view->file_put_contents($this->folder . $this->filename, 'file in subfolder');
- $this->view->file_put_contents($this->folder2 . $this->filename, 'file in subfolder2');
-
- $this->targetValidator = Server::get(ShareTargetValidator::class);
- $this->user2 = $this->createMock(IUser::class);
- $this->user2->method('getUID')
- ->willReturn(self::TEST_FILES_SHARING_API_USER2);
- }
-
-
- /**
- * test if the mount point moves up if the parent folder no longer exists
- */
- public function testShareMountLoseParentFolder(): void {
- // share to user
- $share = $this->share(
- IShare::TYPE_USER,
- $this->folder,
- self::TEST_FILES_SHARING_API_USER1,
- self::TEST_FILES_SHARING_API_USER2,
- Constants::PERMISSION_ALL);
- $this->shareManager->acceptShare($share, self::TEST_FILES_SHARING_API_USER2);
-
- $share->setTarget('/foo/bar' . $this->folder);
- $this->shareManager->moveShare($share, self::TEST_FILES_SHARING_API_USER2);
-
- $share = $this->shareManager->getShareById($share->getFullId());
- $this->assertSame('/foo/bar' . $this->folder, $share->getTarget());
-
- $this->targetValidator->verifyMountPoint($this->user2, $share, [], [$share]);
-
- $share = $this->shareManager->getShareById($share->getFullId());
- $this->assertSame($this->folder, $share->getTarget());
-
- //cleanup
- self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
- $this->shareManager->deleteShare($share);
- $this->view->unlink($this->folder);
- }
-
- /**
- * test if the mount point gets renamed if a folder exists at the target
- */
- public function testShareMountOverFolder(): void {
- self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
- $this->view2->mkdir('bar');
-
- self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
-
- // share to user
- $share = $this->share(
- IShare::TYPE_USER,
- $this->folder,
- self::TEST_FILES_SHARING_API_USER1,
- self::TEST_FILES_SHARING_API_USER2,
- Constants::PERMISSION_ALL);
- $this->shareManager->acceptShare($share, self::TEST_FILES_SHARING_API_USER2);
-
- $share->setTarget('/bar');
- $this->shareManager->moveShare($share, self::TEST_FILES_SHARING_API_USER2);
-
- $share = $this->shareManager->getShareById($share->getFullId());
-
- $this->targetValidator->verifyMountPoint($this->user2, $share, [], [$share]);
-
- $share = $this->shareManager->getShareById($share->getFullId());
- $this->assertSame('/bar (2)', $share->getTarget());
-
- //cleanup
- self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
- $this->shareManager->deleteShare($share);
- $this->view->unlink($this->folder);
- }
-
- /**
- * test if the mount point gets renamed if another share exists at the target
- */
- public function testShareMountOverShare(): void {
- // share to user
- $share2 = $this->share(
- IShare::TYPE_USER,
- $this->folder2,
- self::TEST_FILES_SHARING_API_USER1,
- self::TEST_FILES_SHARING_API_USER2,
- Constants::PERMISSION_ALL);
- $this->shareManager->acceptShare($share2, self::TEST_FILES_SHARING_API_USER2);
-
- $conflictingMount = $this->createMock(ICachedMountInfo::class);
- $this->targetValidator->verifyMountPoint($this->user2, $share2, [
- '/' . $this->user2->getUID() . '/files' . $this->folder2 . '/' => $conflictingMount
- ], [$share2]);
-
- $share2 = $this->shareManager->getShareById($share2->getFullId());
-
- $this->assertSame("{$this->folder2} (2)", $share2->getTarget());
-
- //cleanup
- self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
- $this->shareManager->deleteShare($share2);
- $this->view->unlink($this->folder);
- }
-}
diff --git a/apps/files_sharing/tests/SharedMountTest.php b/apps/files_sharing/tests/SharedMountTest.php
index 020b6ec41c5c8..48cd940bf50c5 100644
--- a/apps/files_sharing/tests/SharedMountTest.php
+++ b/apps/files_sharing/tests/SharedMountTest.php
@@ -8,8 +8,12 @@
namespace OCA\Files_Sharing\Tests;
use OC\Files\Filesystem;
+use OC\Files\View;
+use OC\Memcache\ArrayCache;
+use OCA\Files_Sharing\MountProvider;
use OCA\Files_Sharing\SharedMount;
use OCP\Constants;
+use OCP\ICacheFactory;
use OCP\IDBConnection;
use OCP\IGroupManager;
use OCP\IUserManager;
@@ -21,10 +25,14 @@
*/
#[\PHPUnit\Framework\Attributes\Group(name: 'SLOWDB')]
class SharedMountTest extends TestCase {
- private IGroupManager $groupManager;
- private IUserManager $userManager;
- private string $folder2;
+ /** @var IGroupManager */
+ private $groupManager;
+
+ /** @var IUserManager */
+ private $userManager;
+
+ private $folder2;
protected function setUp(): void {
parent::setUp();
@@ -60,6 +68,78 @@ protected function tearDown(): void {
parent::tearDown();
}
+ /**
+ * test if the mount point moves up if the parent folder no longer exists
+ */
+ public function testShareMountLoseParentFolder(): void {
+
+ // share to user
+ $share = $this->share(
+ IShare::TYPE_USER,
+ $this->folder,
+ self::TEST_FILES_SHARING_API_USER1,
+ self::TEST_FILES_SHARING_API_USER2,
+ Constants::PERMISSION_ALL);
+ $this->shareManager->acceptShare($share, self::TEST_FILES_SHARING_API_USER2);
+
+ $share->setTarget('/foo/bar' . $this->folder);
+ $this->shareManager->moveShare($share, self::TEST_FILES_SHARING_API_USER2);
+
+ $share = $this->shareManager->getShareById($share->getFullId());
+ $this->assertSame('/foo/bar' . $this->folder, $share->getTarget());
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ // share should have moved up
+
+ $share = $this->shareManager->getShareById($share->getFullId());
+ $this->assertSame($this->folder, $share->getTarget());
+
+ //cleanup
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $this->shareManager->deleteShare($share);
+ $this->view->unlink($this->folder);
+ }
+
+ public function testDeleteParentOfMountPoint(): void {
+ // share to user
+ $share = $this->share(
+ IShare::TYPE_USER,
+ $this->folder,
+ self::TEST_FILES_SHARING_API_USER1,
+ self::TEST_FILES_SHARING_API_USER2,
+ Constants::PERMISSION_ALL
+ );
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $user2View = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files');
+ $this->assertTrue($user2View->file_exists($this->folder));
+
+ // create a local folder
+ $result = $user2View->mkdir('localfolder');
+ $this->assertTrue($result);
+
+ // move mount point to local folder
+ $result = $user2View->rename($this->folder, '/localfolder/' . $this->folder);
+ $this->assertTrue($result);
+
+ // mount point in the root folder should no longer exist
+ $this->assertFalse($user2View->is_dir($this->folder));
+
+ // delete the local folder
+ $result = $user2View->unlink('/localfolder');
+ $this->assertTrue($result);
+
+ //enforce reload of the mount points
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ //mount point should be back at the root
+ $this->assertTrue($user2View->is_dir($this->folder));
+
+ //cleanup
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $this->view->unlink($this->folder);
+ }
+
public function testMoveSharedFile(): void {
$share = $this->share(
IShare::TYPE_USER,
@@ -233,6 +313,111 @@ public function testPermissionUpgradeOnUserDeletedGroupShare(): void {
$testGroup->removeUser($user2);
$testGroup->removeUser($user3);
}
+
+ /**
+ * test if the mount point gets renamed if a folder exists at the target
+ */
+ public function testShareMountOverFolder(): void {
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $this->view2->mkdir('bar');
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ // share to user
+ $share = $this->share(
+ IShare::TYPE_USER,
+ $this->folder,
+ self::TEST_FILES_SHARING_API_USER1,
+ self::TEST_FILES_SHARING_API_USER2,
+ Constants::PERMISSION_ALL);
+ $this->shareManager->acceptShare($share, self::TEST_FILES_SHARING_API_USER2);
+
+ $share->setTarget('/bar');
+ $this->shareManager->moveShare($share, self::TEST_FILES_SHARING_API_USER2);
+
+ $share = $this->shareManager->getShareById($share->getFullId());
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ // share should have been moved
+
+ $share = $this->shareManager->getShareById($share->getFullId());
+ $this->assertSame('/bar (2)', $share->getTarget());
+
+ //cleanup
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $this->shareManager->deleteShare($share);
+ $this->view->unlink($this->folder);
+ }
+
+ /**
+ * test if the mount point gets renamed if another share exists at the target
+ */
+ public function testShareMountOverShare(): void {
+ // create a shared cache
+ $caches = [];
+ $cacheFactory = $this->createMock(ICacheFactory::class);
+ $cacheFactory->method('createLocal')
+ ->willReturnCallback(function (string $prefix) use (&$caches) {
+ if (!isset($caches[$prefix])) {
+ $caches[$prefix] = new ArrayCache($prefix);
+ }
+ return $caches[$prefix];
+ });
+ $cacheFactory->method('createDistributed')
+ ->willReturnCallback(function (string $prefix) use (&$caches) {
+ if (!isset($caches[$prefix])) {
+ $caches[$prefix] = new ArrayCache($prefix);
+ }
+ return $caches[$prefix];
+ });
+
+ // hack to overwrite the cache factory, we can't use the proper "overwriteService" since the mount provider is created before this test is called
+ $mountProvider = Server::get(MountProvider::class);
+ $reflectionClass = new \ReflectionClass($mountProvider);
+ $reflectionCacheFactory = $reflectionClass->getProperty('cacheFactory');
+ $reflectionCacheFactory->setValue($mountProvider, $cacheFactory);
+
+ // share to user
+ $share = $this->share(
+ IShare::TYPE_USER,
+ $this->folder,
+ self::TEST_FILES_SHARING_API_USER1,
+ self::TEST_FILES_SHARING_API_USER2,
+ Constants::PERMISSION_ALL);
+ $this->shareManager->acceptShare($share, self::TEST_FILES_SHARING_API_USER2);
+
+ $share->setTarget('/foobar');
+ $this->shareManager->moveShare($share, self::TEST_FILES_SHARING_API_USER2);
+
+
+ // share to user
+ $share2 = $this->share(
+ IShare::TYPE_USER,
+ $this->folder2,
+ self::TEST_FILES_SHARING_API_USER1,
+ self::TEST_FILES_SHARING_API_USER2,
+ Constants::PERMISSION_ALL);
+ $this->shareManager->acceptShare($share2, self::TEST_FILES_SHARING_API_USER2);
+
+ $share2->setTarget('/foobar');
+ $this->shareManager->moveShare($share2, self::TEST_FILES_SHARING_API_USER2);
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ // one of the shares should have been moved
+
+ $share = $this->shareManager->getShareById($share->getFullId());
+ $share2 = $this->shareManager->getShareById($share2->getFullId());
+
+ // we don't know or care which share got the "(2)" just that one of them did
+ $this->assertNotEquals($share->getTarget(), $share2->getTarget());
+ $this->assertSame('/foobar', min($share->getTarget(), $share2->getTarget()));
+ $this->assertSame('/foobar (2)', max($share->getTarget(), $share2->getTarget()));
+
+ //cleanup
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $this->shareManager->deleteShare($share);
+ $this->view->unlink($this->folder);
+ }
}
class DummyTestClassSharedMount extends SharedMount {
diff --git a/apps/files_sharing/tests/SharedStorageTest.php b/apps/files_sharing/tests/SharedStorageTest.php
index cd0a06f24363e..ada3d84734c7d 100644
--- a/apps/files_sharing/tests/SharedStorageTest.php
+++ b/apps/files_sharing/tests/SharedStorageTest.php
@@ -10,6 +10,7 @@
use OC\Files\Cache\FailedCache;
use OC\Files\Filesystem;
use OC\Files\Storage\FailedStorage;
+use OC\Files\Storage\Storage;
use OC\Files\Storage\Temporary;
use OC\Files\View;
use OCA\Files_Sharing\SharedStorage;
@@ -59,6 +60,51 @@ protected function tearDown(): void {
parent::tearDown();
}
+ /**
+ * if the parent of the mount point is gone then the mount point should move up
+ */
+ public function testParentOfMountPointIsGone(): void {
+
+ // share to user
+ $share = $this->share(
+ IShare::TYPE_USER,
+ $this->folder,
+ self::TEST_FILES_SHARING_API_USER1,
+ self::TEST_FILES_SHARING_API_USER2,
+ Constants::PERMISSION_ALL
+ );
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $user2View = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files');
+ $this->assertTrue($user2View->file_exists($this->folder));
+
+ // create a local folder
+ $result = $user2View->mkdir('localfolder');
+ $this->assertTrue($result);
+
+ // move mount point to local folder
+ $result = $user2View->rename($this->folder, '/localfolder/' . $this->folder);
+ $this->assertTrue($result);
+
+ // mount point in the root folder should no longer exist
+ $this->assertFalse($user2View->is_dir($this->folder));
+
+ // delete the local folder
+ /** @var Storage $storage */
+ [$storage, $internalPath] = Filesystem::resolvePath('/' . self::TEST_FILES_SHARING_API_USER2 . '/files/localfolder');
+ $storage->rmdir($internalPath);
+
+ //enforce reload of the mount points
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ //mount point should be back at the root
+ $this->assertTrue($user2View->is_dir($this->folder));
+
+ //cleanup
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $this->view->unlink($this->folder);
+ }
+
public function testRenamePartFile(): void {
// share to user
@@ -420,6 +466,57 @@ public function testMoveFromStorage(): void {
$this->shareManager->deleteShare($share);
}
+ public function testNameConflict(): void {
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+ $view1 = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files');
+ $view1->mkdir('foo');
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER3);
+ $view3 = new View('/' . self::TEST_FILES_SHARING_API_USER3 . '/files');
+ $view3->mkdir('foo');
+
+ // share a folder with the same name from two different users to the same user
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+ $share1 = $this->share(
+ IShare::TYPE_GROUP,
+ 'foo',
+ self::TEST_FILES_SHARING_API_USER1,
+ self::TEST_FILES_SHARING_API_GROUP1,
+ Constants::PERMISSION_ALL
+ );
+ $this->shareManager->acceptShare($share1, self::TEST_FILES_SHARING_API_USER2);
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER3);
+
+ $share2 = $this->share(
+ IShare::TYPE_GROUP,
+ 'foo',
+ self::TEST_FILES_SHARING_API_USER3,
+ self::TEST_FILES_SHARING_API_GROUP1,
+ Constants::PERMISSION_ALL
+ );
+ $this->shareManager->acceptShare($share2, self::TEST_FILES_SHARING_API_USER2);
+
+ self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+ $view2 = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files');
+
+ $this->assertTrue($view2->file_exists('/foo'));
+ $this->assertTrue($view2->file_exists('/foo (2)'));
+
+ $mount = $view2->getMount('/foo');
+ $this->assertInstanceOf('\OCA\Files_Sharing\SharedMount', $mount);
+ /** @var SharedStorage $storage */
+ $storage = $mount->getStorage();
+
+ $this->assertEquals(self::TEST_FILES_SHARING_API_USER1, $storage->getOwner(''));
+
+ $this->shareManager->deleteShare($share1);
+ $this->shareManager->deleteShare($share2);
+ }
+
public function testOwnerPermissions(): void {
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
diff --git a/apps/files_sharing/tests/SharesUpdatedListenerTest.php b/apps/files_sharing/tests/SharesUpdatedListenerTest.php
deleted file mode 100644
index a6ec4ace499bf..0000000000000
--- a/apps/files_sharing/tests/SharesUpdatedListenerTest.php
+++ /dev/null
@@ -1,183 +0,0 @@
-shareRecipientUpdater = $this->createMock(ShareRecipientUpdater::class);
- $this->manager = $this->createMock(IManager::class);
- $this->appConfig = new MockAppConfig([
- ConfigLexicon::UPDATE_CUTOFF_TIME => -1,
- ]);
- $this->userConfig = new MockUserConfig();
- $this->clock = $this->createMock(ClockInterface::class);
- $this->clockFn = function () {
- return new \DateTimeImmutable('@0');
- };
- $this->clock->method('now')
- ->willReturnCallback(function () {
- // extra wrapper so we can modify clockFn
- return ($this->clockFn)();
- });
- $this->sharesUpdatedListener = new SharesUpdatedListener(
- $this->manager,
- $this->shareRecipientUpdater,
- $this->userConfig,
- $this->clock,
- $this->appConfig,
- );
- }
-
- public function testShareAdded() {
- $share = $this->createMock(IShare::class);
- $user1 = $this->createUser('user1', '');
- $user2 = $this->createUser('user2', '');
-
- $this->manager->method('getUsersForShare')
- ->willReturn([$user1, $user2]);
-
- $event = new ShareCreatedEvent($share);
-
- $this->shareRecipientUpdater
- ->expects($this->exactly(2))
- ->method('updateForAddedShare')
- ->willReturnCallback(function (IUser $user, IShare $eventShare) use ($user1, $user2, $share) {
- $this->assertContains($user, [$user1, $user2]);
- $this->assertEquals($share, $eventShare);
- });
-
- $this->sharesUpdatedListener->handle($event);
- }
-
- public function testShareAddedFilterOwner() {
- $share = $this->createMock(IShare::class);
- $user1 = $this->createUser('user1', '');
- $user2 = $this->createUser('user2', '');
- $share->method('getSharedBy')
- ->willReturn($user1->getUID());
-
- $this->manager->method('getUsersForShare')
- ->willReturn([$user1, $user2]);
-
- $event = new ShareCreatedEvent($share);
-
- $this->shareRecipientUpdater
- ->expects($this->exactly(1))
- ->method('updateForAddedShare')
- ->willReturnCallback(function (IUser $user, IShare $eventShare) use ($user2, $share) {
- $this->assertEquals($user, $user2);
- $this->assertEquals($share, $eventShare);
- });
-
- $this->sharesUpdatedListener->handle($event);
- }
-
- public function testShareAccessUpdated() {
- $user1 = $this->createUser('user1', '');
- $user2 = $this->createUser('user2', '');
-
- $event = new UserShareAccessUpdatedEvent([$user1, $user2]);
-
- $this->shareRecipientUpdater
- ->expects($this->exactly(2))
- ->method('updateForUser')
- ->willReturnCallback(function (IUser $user) use ($user1, $user2) {
- $this->assertContains($user, [$user1, $user2]);
- });
-
- $this->sharesUpdatedListener->handle($event);
- }
-
- public function testShareDeleted() {
- $share = $this->createMock(IShare::class);
- $user1 = $this->createUser('user1', '');
- $user2 = $this->createUser('user2', '');
-
- $this->manager->method('getUsersForShare')
- ->willReturn([$user1, $user2]);
-
- $event = new BeforeShareDeletedEvent($share);
-
- $this->shareRecipientUpdater
- ->expects($this->exactly(2))
- ->method('updateForDeletedShare')
- ->willReturnCallback(function (IUser $user) use ($user1, $user2, $share) {
- $this->assertContains($user, [$user1, $user2]);
- });
-
- $this->sharesUpdatedListener->handle($event);
- }
-
- public static function shareMarkAfterTimeProvider(): array {
- // note that each user will take exactly 1s in this test
- return [
- [0, 0],
- [0.9, 1],
- [1.1, 2],
- [-1, 2],
- ];
- }
-
- #[DataProvider('shareMarkAfterTimeProvider')]
- public function testShareMarkAfterTime(float $cutOff, int $expectedCount) {
- $share = $this->createMock(IShare::class);
- $user1 = $this->createUser('user1', '');
- $user2 = $this->createUser('user2', '');
-
- $this->manager->method('getUsersForShare')
- ->willReturn([$user1, $user2]);
-
- $event = new ShareCreatedEvent($share);
-
- $this->sharesUpdatedListener->setCutOffMarkTime($cutOff);
- $time = 0;
- $this->clockFn = function () use (&$time) {
- $time++;
- return new \DateTimeImmutable('@' . $time);
- };
-
- $this->shareRecipientUpdater
- ->expects($this->exactly($expectedCount))
- ->method('updateForAddedShare');
-
- $this->sharesUpdatedListener->handle($event);
-
- $this->assertEquals($expectedCount < 1, $this->userConfig->getValueBool($user1->getUID(), 'files_sharing', ConfigLexicon::USER_NEEDS_SHARE_REFRESH));
- $this->assertEquals($expectedCount < 2, $this->userConfig->getValueBool($user2->getUID(), 'files_sharing', ConfigLexicon::USER_NEEDS_SHARE_REFRESH));
- }
-}
diff --git a/apps/files_sharing/tests/TestCase.php b/apps/files_sharing/tests/TestCase.php
index 02ee66d096118..6b72ecb259cab 100644
--- a/apps/files_sharing/tests/TestCase.php
+++ b/apps/files_sharing/tests/TestCase.php
@@ -15,7 +15,6 @@
use OC\User\DisplayNameCache;
use OCA\Files_Sharing\AppInfo\Application;
use OCA\Files_Sharing\External\MountProvider as ExternalMountProvider;
-use OCA\Files_Sharing\Listener\SharesUpdatedListener;
use OCA\Files_Sharing\MountProvider;
use OCP\Files\Config\IMountProviderCollection;
use OCP\Files\IRootFolder;
@@ -100,8 +99,6 @@ public static function setUpBeforeClass(): void {
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER4, 'group3');
$groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_GROUP1);
Server::get(IGroupManager::class)->addBackend($groupBackend);
-
- Server::get(SharesUpdatedListener::class)->setCutOffMarkTime(-1);
}
protected function setUp(): void {
diff --git a/apps/files_trashbin/lib/Trash/TrashItem.php b/apps/files_trashbin/lib/Trash/TrashItem.php
index 2864a8cd942f4..70d5164747f0b 100644
--- a/apps/files_trashbin/lib/Trash/TrashItem.php
+++ b/apps/files_trashbin/lib/Trash/TrashItem.php
@@ -6,7 +6,6 @@
*/
namespace OCA\Files_Trashbin\Trash;
-use OCP\Files\Cache\ICacheEntry;
use OCP\Files\FileInfo;
use OCP\IUser;
@@ -170,8 +169,4 @@ public function getDeletedBy(): ?IUser {
public function getMetadata(): array {
return $this->fileInfo->getMetadata();
}
-
- public function getData(): ICacheEntry {
- return $this->fileInfo->getData();
- }
}
diff --git a/apps/files_versions/tests/VersioningTest.php b/apps/files_versions/tests/VersioningTest.php
index fdc37016b5573..6faa324f9ca1b 100644
--- a/apps/files_versions/tests/VersioningTest.php
+++ b/apps/files_versions/tests/VersioningTest.php
@@ -104,8 +104,6 @@ protected function setUp(): void {
\OC::registerShareHooks(Server::get(SystemConfig::class));
\OC::$server->boot();
- // ensure both users have an up-to-date state
- self::loginHelper(self::TEST_VERSIONS_USER2);
self::loginHelper(self::TEST_VERSIONS_USER);
$this->rootView = new View();
if (!$this->rootView->file_exists(self::USERS_VERSIONS_ROOT)) {
diff --git a/build/integration/features/bootstrap/Sharing.php b/build/integration/features/bootstrap/Sharing.php
index 5fe98aff35d1e..72f6902af167e 100644
--- a/build/integration/features/bootstrap/Sharing.php
+++ b/build/integration/features/bootstrap/Sharing.php
@@ -5,7 +5,6 @@
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
use Behat\Gherkin\Node\TableNode;
use GuzzleHttp\Client;
use PHPUnit\Framework\Assert;
@@ -14,6 +13,7 @@
require __DIR__ . '/autoload.php';
+
trait Sharing {
use Provisioning;
@@ -566,17 +566,17 @@ public function shareXIsReturnedWith(int $number, TableNode $body) {
$expectedFields = array_merge($defaultExpectedFields, $body->getRowsHash());
if (!array_key_exists('uid_file_owner', $expectedFields)
- && array_key_exists('uid_owner', $expectedFields)) {
+ && array_key_exists('uid_owner', $expectedFields)) {
$expectedFields['uid_file_owner'] = $expectedFields['uid_owner'];
}
if (!array_key_exists('displayname_file_owner', $expectedFields)
- && array_key_exists('displayname_owner', $expectedFields)) {
+ && array_key_exists('displayname_owner', $expectedFields)) {
$expectedFields['displayname_file_owner'] = $expectedFields['displayname_owner'];
}
if (array_key_exists('share_type', $expectedFields)
- && $expectedFields['share_type'] == 10 /* IShare::TYPE_ROOM */
- && array_key_exists('share_with', $expectedFields)) {
+ && $expectedFields['share_type'] == 10 /* IShare::TYPE_ROOM */
+ && array_key_exists('share_with', $expectedFields)) {
if ($expectedFields['share_with'] === 'private_conversation') {
$expectedFields['share_with'] = 'REGEXP /^private_conversation_[0-9a-f]{6}$/';
} else {
@@ -782,34 +782,4 @@ public function getArrayOfShareesResponded(ResponseInterface $response, $shareeT
}
return $sharees;
}
-
- /**
- * @Then /^Share mounts for "([^"]*)" match$/
- */
- public function checkShareMounts(string $user, ?TableNode $body) {
- if ($body instanceof TableNode) {
- $fd = $body->getRows();
-
- $expected = [];
- foreach ($fd as $row) {
- $expected[] = $row[0];
- }
- $this->runOcc(['files:mount:list', '--output', 'json', '--cached-only', $user]);
- $mounts = json_decode($this->lastStdOut, true)['cached'];
- $shareMounts = array_filter($mounts, fn (array $data) => $data['provider'] === \OCA\Files_Sharing\MountProvider::class);
- $actual = array_values(array_map(fn (array $data) => $data['mountpoint'], $shareMounts));
- Assert::assertEquals($expected, $actual);
- }
- }
-
- /**
- * @Then /^Share mounts for "([^"]*)" are empty$/
- */
- public function checkShareMountsEmpty(string $user) {
- $this->runOcc(['files:mount:list', '--output', 'json', '--cached-only', $user]);
- $mounts = json_decode($this->lastStdOut, true)['cached'];
- $shareMounts = array_filter($mounts, fn (array $data) => $data['provider'] === \OCA\Files_Sharing\MountProvider::class);
- $actual = array_values(array_map(fn (array $data) => $data['mountpoint'], $shareMounts));
- Assert::assertEquals([], $actual);
- }
}
diff --git a/build/integration/features/bootstrap/SharingContext.php b/build/integration/features/bootstrap/SharingContext.php
index 9f70382438467..c442317a32a38 100644
--- a/build/integration/features/bootstrap/SharingContext.php
+++ b/build/integration/features/bootstrap/SharingContext.php
@@ -32,7 +32,6 @@ protected function resetAppConfigs() {
$this->deleteServerConfig('core', 'shareapi_allow_federation_on_public_shares');
$this->deleteServerConfig('files_sharing', 'outgoing_server2server_share_enabled');
$this->deleteServerConfig('core', 'shareapi_allow_view_without_download');
- $this->deleteServerConfig('files_sharing', 'update_cutoff_time');
$this->runOcc(['config:system:delete', 'share_folder']);
}
diff --git a/build/integration/features/bootstrap/WebDav.php b/build/integration/features/bootstrap/WebDav.php
index fb2e441d93791..fb552ce785b75 100644
--- a/build/integration/features/bootstrap/WebDav.php
+++ b/build/integration/features/bootstrap/WebDav.php
@@ -1011,7 +1011,7 @@ public function checkIfETAGHasChanged($path, $user) {
*/
public function connectingToDavEndpoint() {
try {
- $this->response = $this->makeDavRequest($this->currentUser, 'PROPFIND', '', []);
+ $this->response = $this->makeDavRequest(null, 'PROPFIND', '', []);
} catch (\GuzzleHttp\Exception\ClientException $e) {
$this->response = $e->getResponse();
}
diff --git a/build/integration/sharing_features/sharing-v1-part2.feature b/build/integration/sharing_features/sharing-v1-part2.feature
index 36ddcba92d29a..a6e4c67165a0f 100644
--- a/build/integration/sharing_features/sharing-v1-part2.feature
+++ b/build/integration/sharing_features/sharing-v1-part2.feature
@@ -43,53 +43,10 @@ Feature: sharing
| item_type | file |
| mimetype | text/plain |
| storage_id | shared::/textfile0 (2).txt |
- | file_target | /textfile0 (2).txt |
+ | file_target | /textfile0.txt |
| share_with | user2 |
| share_with_displayname | user2 |
-Scenario: getting all shares of a file with a received share after revoking the resharing rights with delayed share check
- Given user "user0" exists
- And parameter "update_cutoff_time" of app "files_sharing" is set to "0"
- And user "user1" exists
- And user "user2" exists
- And file "textfile0.txt" of user "user1" is shared with user "user0"
- And user "user0" accepts last share
- And Updating last share with
- | permissions | 1 |
- And file "textfile0.txt" of user "user1" is shared with user "user2"
- When As an "user0"
- And sending "GET" to "/apps/files_sharing/api/v1/shares?reshares=true&path=/textfile0 (2).txt"
- Then the list of returned shares has 1 shares
- And share 0 is returned with
- | share_type | 0 |
- | uid_owner | user1 |
- | displayname_owner | user1 |
- | path | /textfile0 (2).txt |
- | item_type | file |
- | mimetype | text/plain |
- | storage_id | shared::/textfile0 (2).txt |
- | file_target | /textfile0.txt |
- | share_with | user2 |
- | share_with_displayname | user2 |
- # After user2 does an FS setup the share is renamed
- When As an "user2"
- And Downloading file "/textfile0 (2).txt" with range "bytes=10-18"
- Then Downloaded content should be "test text"
- When As an "user0"
- And sending "GET" to "/apps/files_sharing/api/v1/shares?reshares=true&path=/textfile0 (2).txt"
- Then the list of returned shares has 1 shares
- And share 0 is returned with
- | share_type | 0 |
- | uid_owner | user1 |
- | displayname_owner | user1 |
- | path | /textfile0 (2).txt |
- | item_type | file |
- | mimetype | text/plain |
- | storage_id | shared::/textfile0 (2).txt |
- | file_target | /textfile0 (2).txt |
- | share_with | user2 |
- | share_with_displayname | user2 |
-
Scenario: getting all shares of a file with a received share also reshared after revoking the resharing rights
Given user "user0" exists
And user "user1" exists
@@ -127,7 +84,7 @@ Scenario: getting all shares of a file with a received share after revoking the
| item_type | file |
| mimetype | text/plain |
| storage_id | shared::/textfile0 (2).txt |
- | file_target | /textfile0 (2).txt |
+ | file_target | /textfile0.txt |
| share_with | user2 |
| share_with_displayname | user2 |
@@ -163,7 +120,7 @@ Scenario: getting all shares of a file with a received share after revoking the
| share_type | 0 |
| share_with | user1 |
| file_source | A_NUMBER |
- | file_target | /textfile0 (2).txt |
+ | file_target | /textfile0.txt |
| path | /textfile0.txt |
| permissions | 19 |
| stime | A_NUMBER |
@@ -444,7 +401,7 @@ Scenario: getting all shares of a file with a received share after revoking the
| item_type | file |
| mimetype | text/plain |
| storage_id | shared::/FOLDER/textfile0.txt |
- | file_target | /textfile0 (2).txt |
+ | file_target | /textfile0.txt |
| share_with | user2 |
| share_with_displayname | user2 |
@@ -483,7 +440,7 @@ Scenario: getting all shares of a file with a received share after revoking the
| item_type | file |
| mimetype | text/plain |
| storage_id | shared::/FOLDER/textfile0 (2).txt |
- | file_target | /textfile0 (2).txt |
+ | file_target | /textfile0.txt |
| share_with | user2 |
| share_with_displayname | user2 |
@@ -930,7 +887,7 @@ Scenario: getting all shares of a file with a received share after revoking the
| share_type | 0 |
| share_with | user2 |
| file_source | A_NUMBER |
- | file_target | /textfile0 (2).txt |
+ | file_target | /textfile0.txt |
| path | /textfile0 (2).txt |
| permissions | 19 |
| stime | A_NUMBER |
diff --git a/build/integration/sharing_features/sharing-v1-part4.feature b/build/integration/sharing_features/sharing-v1-part4.feature
index 5e710d7f28647..3b825aebd1813 100644
--- a/build/integration/sharing_features/sharing-v1-part4.feature
+++ b/build/integration/sharing_features/sharing-v1-part4.feature
@@ -315,114 +315,3 @@ Scenario: Can copy file between shares if share permissions
And the OCS status code should be "100"
When User "user1" copies file "/share/test.txt" to "/re-share/movetest.txt"
Then the HTTP status code should be "201"
-
-Scenario: Group deletes removes mount without marking
- Given As an "admin"
- And user "user0" exists
- And user "user1" exists
- And group "group0" exists
- And user "user0" belongs to group "group0"
- And file "textfile0.txt" of user "user1" is shared with group "group0"
- And As an "user0"
- Then Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- And group "group0" does not exist
- Then Share mounts for "user0" are empty
-
-Scenario: Group deletes removes mount with marking
- Given As an "admin"
- And parameter "update_cutoff_time" of app "files_sharing" is set to "0"
- And user "user0" exists
- And user "user1" exists
- And group "group0" exists
- And user "user0" belongs to group "group0"
- And file "textfile0.txt" of user "user1" is shared with group "group0"
- And As an "user0"
- Then Share mounts for "user0" are empty
- When Connecting to dav endpoint
- Then Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- And group "group0" does not exist
- Then Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- When Connecting to dav endpoint
- Then Share mounts for "user0" are empty
-
-Scenario: User share mount without marking
- Given As an "admin"
- And user "user0" exists
- And user "user1" exists
- And file "textfile0.txt" of user "user1" is shared with user "user0"
- And As an "user0"
- Then Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- When Deleting last share
- Then Share mounts for "user0" are empty
-
-Scenario: User share mount with marking
- Given As an "admin"
- And parameter "update_cutoff_time" of app "files_sharing" is set to "0"
- And user "user0" exists
- And user "user1" exists
- And file "textfile0.txt" of user "user1" is shared with user "user0"
- And As an "user0"
- Then Share mounts for "user0" are empty
- When Connecting to dav endpoint
- Then Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- When Deleting last share
- Then Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- When Connecting to dav endpoint
- Then Share mounts for "user0" are empty
-
-Scenario: User added/removed to group share without marking
- Given As an "admin"
- And user "user0" exists
- And user "user1" exists
- And group "group0" exists
- And file "textfile0.txt" of user "user1" is shared with group "group0"
- And As an "user0"
- Then Share mounts for "user0" are empty
- When user "user0" belongs to group "group0"
- Then Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- When As an "admin"
- Then sending "DELETE" to "/cloud/users/user0/groups" with
- | groupid | group0 |
- Then As an "user0"
- And Share mounts for "user0" are empty
-
-Scenario: User added/removed to group share with marking
- Given As an "admin"
- And parameter "update_cutoff_time" of app "files_sharing" is set to "0"
- And user "user0" exists
- And user "user1" exists
- And group "group0" exists
- And file "textfile0.txt" of user "user1" is shared with group "group0"
- And As an "user0"
- When user "user0" belongs to group "group0"
- Then Share mounts for "user0" are empty
- When Connecting to dav endpoint
- Then Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- When As an "admin"
- Then sending "DELETE" to "/cloud/users/user0/groups" with
- | groupid | group0 |
- Then As an "user0"
- And Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- When Connecting to dav endpoint
- Then Share mounts for "user0" are empty
-
- Scenario: Share moved without marking
- Given As an "admin"
- And user "user0" exists
- And user "user1" exists
- And file "textfile0.txt" of user "user1" is shared with user "user0"
- And As an "user0"
- Then Share mounts for "user0" match
- | /user0/files/textfile0 (2).txt/ |
- When User "user0" moves file "/textfile0 (2).txt" to "/target.txt"
- Then Share mounts for "user0" match
- | /user0/files/target.txt/ |
diff --git a/build/integration/sharing_features/sharing-v1.feature b/build/integration/sharing_features/sharing-v1.feature
index dad3d6ee6fd9a..25f168db2e7cb 100644
--- a/build/integration/sharing_features/sharing-v1.feature
+++ b/build/integration/sharing_features/sharing-v1.feature
@@ -559,8 +559,6 @@ Feature: sharing
Scenario: getting all shares of a user using that user
Given user "user0" exists
And user "user1" exists
- When User "user1" deletes file "/textfile0.txt"
- And the HTTP status code should be "204"
And file "textfile0.txt" of user "user0" is shared with user "user1"
And As an "user0"
When sending "GET" to "/apps/files_sharing/api/v1/shares"
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index df50cfbc096ad..ba1487488fda9 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -468,7 +468,6 @@
'OCP\\Files\\Events\\Node\\NodeRenamedEvent' => $baseDir . '/lib/public/Files/Events/Node/NodeRenamedEvent.php',
'OCP\\Files\\Events\\Node\\NodeTouchedEvent' => $baseDir . '/lib/public/Files/Events/Node/NodeTouchedEvent.php',
'OCP\\Files\\Events\\Node\\NodeWrittenEvent' => $baseDir . '/lib/public/Files/Events/Node/NodeWrittenEvent.php',
- 'OCP\\Files\\Events\\UserHomeSetupEvent' => $baseDir . '/lib/public/Files/Events/UserHomeSetupEvent.php',
'OCP\\Files\\File' => $baseDir . '/lib/public/Files/File.php',
'OCP\\Files\\FileInfo' => $baseDir . '/lib/public/Files/FileInfo.php',
'OCP\\Files\\FileNameTooLongException' => $baseDir . '/lib/public/Files/FileNameTooLongException.php',
@@ -847,8 +846,6 @@
'OCP\\Share\\Events\\ShareCreatedEvent' => $baseDir . '/lib/public/Share/Events/ShareCreatedEvent.php',
'OCP\\Share\\Events\\ShareDeletedEvent' => $baseDir . '/lib/public/Share/Events/ShareDeletedEvent.php',
'OCP\\Share\\Events\\ShareDeletedFromSelfEvent' => $baseDir . '/lib/public/Share/Events/ShareDeletedFromSelfEvent.php',
- 'OCP\\Share\\Events\\ShareMovedEvent' => $baseDir . '/lib/public/Share/Events/ShareMovedEvent.php',
- 'OCP\\Share\\Events\\ShareTransferredEvent' => $baseDir . '/lib/public/Share/Events/ShareTransferredEvent.php',
'OCP\\Share\\Events\\VerifyMountPointEvent' => $baseDir . '/lib/public/Share/Events/VerifyMountPointEvent.php',
'OCP\\Share\\Exceptions\\AlreadySharedException' => $baseDir . '/lib/public/Share/Exceptions/AlreadySharedException.php',
'OCP\\Share\\Exceptions\\GenericShareException' => $baseDir . '/lib/public/Share/Exceptions/GenericShareException.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 927f1d82bad0d..993dbfc52e930 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -509,7 +509,6 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OCP\\Files\\Events\\Node\\NodeRenamedEvent' => __DIR__ . '/../../..' . '/lib/public/Files/Events/Node/NodeRenamedEvent.php',
'OCP\\Files\\Events\\Node\\NodeTouchedEvent' => __DIR__ . '/../../..' . '/lib/public/Files/Events/Node/NodeTouchedEvent.php',
'OCP\\Files\\Events\\Node\\NodeWrittenEvent' => __DIR__ . '/../../..' . '/lib/public/Files/Events/Node/NodeWrittenEvent.php',
- 'OCP\\Files\\Events\\UserHomeSetupEvent' => __DIR__ . '/../../..' . '/lib/public/Files/Events/UserHomeSetupEvent.php',
'OCP\\Files\\File' => __DIR__ . '/../../..' . '/lib/public/Files/File.php',
'OCP\\Files\\FileInfo' => __DIR__ . '/../../..' . '/lib/public/Files/FileInfo.php',
'OCP\\Files\\FileNameTooLongException' => __DIR__ . '/../../..' . '/lib/public/Files/FileNameTooLongException.php',
@@ -888,8 +887,6 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OCP\\Share\\Events\\ShareCreatedEvent' => __DIR__ . '/../../..' . '/lib/public/Share/Events/ShareCreatedEvent.php',
'OCP\\Share\\Events\\ShareDeletedEvent' => __DIR__ . '/../../..' . '/lib/public/Share/Events/ShareDeletedEvent.php',
'OCP\\Share\\Events\\ShareDeletedFromSelfEvent' => __DIR__ . '/../../..' . '/lib/public/Share/Events/ShareDeletedFromSelfEvent.php',
- 'OCP\\Share\\Events\\ShareMovedEvent' => __DIR__ . '/../../..' . '/lib/public/Share/Events/ShareMovedEvent.php',
- 'OCP\\Share\\Events\\ShareTransferredEvent' => __DIR__ . '/../../..' . '/lib/public/Share/Events/ShareTransferredEvent.php',
'OCP\\Share\\Events\\VerifyMountPointEvent' => __DIR__ . '/../../..' . '/lib/public/Share/Events/VerifyMountPointEvent.php',
'OCP\\Share\\Exceptions\\AlreadySharedException' => __DIR__ . '/../../..' . '/lib/public/Share/Exceptions/AlreadySharedException.php',
'OCP\\Share\\Exceptions\\GenericShareException' => __DIR__ . '/../../..' . '/lib/public/Share/Exceptions/GenericShareException.php',
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index 4b58055f2cf05..3250ba371e8d2 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -524,12 +524,6 @@ public function removeMount(string $mountPoint): void {
$query->delete('mounts')
->where($query->expr()->eq('mount_point', $query->createNamedParameter($mountPoint)));
$query->executeStatement();
-
- $parts = explode('/', $mountPoint);
- if (count($parts) > 3) {
- [, $userId] = $parts;
- unset($this->mountsForUsers[$userId]);
- }
}
public function addMount(IUser $user, string $mountPoint, ICacheEntry $rootCacheEntry, string $mountProvider, ?int $mountId = null): void {
@@ -542,15 +536,5 @@ public function addMount(IUser $user, string $mountPoint, ICacheEntry $rootCache
'mount_id' => $mountId,
'mount_provider_class' => $mountProvider
]);
- unset($this->mountsForUsers[$user->getUID()]);
- }
-
- /**
- * Clear the internal in-memory caches
- */
- public function flush(): void {
- $this->cacheInfoCache = new CappedMemoryCache();
- $this->internalPathCache = new CappedMemoryCache();
- $this->mountsForUsers = new CappedMemoryCache();
}
}
diff --git a/lib/private/Files/FileInfo.php b/lib/private/Files/FileInfo.php
index cc01c8f6c79fc..967d404b8a4f0 100644
--- a/lib/private/Files/FileInfo.php
+++ b/lib/private/Files/FileInfo.php
@@ -7,8 +7,8 @@
*/
namespace OC\Files;
-use OC\Files\Cache\CacheEntry;
use OC\Files\Mount\HomeMountPoint;
+use OCA\Files_Sharing\External\Mount;
use OCA\Files_Sharing\ISharedMountPoint;
use OCP\Files\Cache\ICacheEntry;
use OCP\Files\Mount\IMountPoint;
@@ -223,12 +223,8 @@ public function getType() {
return $this->data['type'];
}
- public function getData(): ICacheEntry {
- if ($this->data instanceof ICacheEntry) {
- return $this->data;
- } else {
- return new CacheEntry($this->data);
- }
+ public function getData() {
+ return $this->data;
}
/**
diff --git a/lib/private/Files/Mount/Manager.php b/lib/private/Files/Mount/Manager.php
index 0d95a2e9917d3..3d586ba4c5911 100644
--- a/lib/private/Files/Mount/Manager.php
+++ b/lib/private/Files/Mount/Manager.php
@@ -59,14 +59,11 @@ public function removeMount(string $mountPoint): void {
}
public function moveMount(string $mountPoint, string $target): void {
- if ($mountPoint !== $target && isset($this->mounts[$mountPoint])) {
- $this->mounts[$target] = $this->mounts[$mountPoint];
- $this->mounts[$target]->setMountPoint($target);
- unset($this->mounts[$mountPoint]);
- $this->pathCache->clear();
- $this->inPathCache->clear();
- $this->areMountsSorted = false;
- }
+ $this->mounts[$target] = $this->mounts[$mountPoint];
+ unset($this->mounts[$mountPoint]);
+ $this->pathCache->clear();
+ $this->inPathCache->clear();
+ $this->areMountsSorted = false;
}
/**
diff --git a/lib/private/Files/Node/LazyFolder.php b/lib/private/Files/Node/LazyFolder.php
index 58f58c98660b2..c23a7d03ada9e 100644
--- a/lib/private/Files/Node/LazyFolder.php
+++ b/lib/private/Files/Node/LazyFolder.php
@@ -10,7 +10,6 @@
use OC\Files\Filesystem;
use OC\Files\Utils\PathHelper;
use OCP\Constants;
-use OCP\Files\Cache\ICacheEntry;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
use OCP\Files\Mount\IMountPoint;
@@ -566,10 +565,6 @@ public function getMetadata(): array {
return $this->data['metadata'] ?? $this->__call(__FUNCTION__, func_get_args());
}
- public function getData(): ICacheEntry {
- return $this->__call(__FUNCTION__, func_get_args());
- }
-
public function verifyPath($fileName, $readonly = false): void {
$this->__call(__FUNCTION__, func_get_args());
}
diff --git a/lib/private/Files/Node/Node.php b/lib/private/Files/Node/Node.php
index 7a7867e6a4e7a..fd8d84883d964 100644
--- a/lib/private/Files/Node/Node.php
+++ b/lib/private/Files/Node/Node.php
@@ -12,7 +12,6 @@
use OC\Files\Utils\PathHelper;
use OCP\EventDispatcher\GenericEvent;
use OCP\EventDispatcher\IEventDispatcher;
-use OCP\Files\Cache\ICacheEntry;
use OCP\Files\FileInfo;
use OCP\Files\InvalidPathException;
use OCP\Files\IRootFolder;
@@ -487,8 +486,4 @@ public function getParentId(): int {
public function getMetadata(): array {
return $this->fileInfo->getMetadata();
}
-
- public function getData(): ICacheEntry {
- return $this->fileInfo->getData();
- }
}
diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php
index 4aab010f42357..06ec47d165489 100644
--- a/lib/private/Files/SetupManager.php
+++ b/lib/private/Files/SetupManager.php
@@ -43,7 +43,6 @@
use OCP\Files\Events\InvalidateMountCacheEvent;
use OCP\Files\Events\Node\BeforeNodeRenamedEvent;
use OCP\Files\Events\Node\FilesystemTornDownEvent;
-use OCP\Files\Events\UserHomeSetupEvent;
use OCP\Files\Mount\IMountManager;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
@@ -70,8 +69,6 @@ class SetupManager {
private array $setupUsers = [];
// List of users for which all mounts are setup
private array $setupUsersComplete = [];
- // List of users for which we've already refreshed the non-authoritative mounts
- private array $usersMountsUpdated = [];
/**
* An array of provider classes that have been set up, indexed by UserUID.
*
@@ -236,10 +233,6 @@ function ($mountPoint, IStorage $storage, IMountPoint $mount) use ($reSharingEna
* Update the cached mounts for all non-authoritative mount providers for a user.
*/
private function updateNonAuthoritativeProviders(IUser $user): void {
- if (isset($this->usersMountsUpdated[$user->getUID()])) {
- return;
- }
-
// prevent recursion loop from when getting mounts from providers ends up setting up the filesystem
static $updatingProviders = false;
if ($updatingProviders) {
@@ -260,7 +253,6 @@ private function updateNonAuthoritativeProviders(IUser $user): void {
$mount = $this->mountProviderCollection->getUserMountsForProviderClasses($user, $providerNames);
$this->userMountCache->registerMounts($user, $mount, $providerNames);
- $this->usersMountsUpdated[$user->getUID()] = true;
$updatingProviders = false;
}
@@ -333,9 +325,6 @@ private function oneTimeUserSetup(IUser $user) {
$this->eventLogger->end('fs:setup:user:home:scan');
}
$this->eventLogger->end('fs:setup:user:home');
-
- $event = new UserHomeSetupEvent($user, $homeMount);
- $this->eventDispatcher->dispatchTyped($event);
} else {
$this->mountManager->addMount(new MountPoint(
new NullStorage([]),
@@ -696,13 +685,8 @@ public function setupForProvider(string $path, array $providers): void {
}
if (!$providersAreAuthoritative && $this->fullSetupRequired($user)) {
- if ($this->optimizeAuthoritativeProviders) {
- $this->updateNonAuthoritativeProviders($user);
- $this->markUserMountsCached($user);
- } else {
- $this->setupForUser($user);
- return;
- }
+ $this->setupForUser($user);
+ return;
}
$this->eventLogger->start('fs:setup:user:providers', 'Setup filesystem for ' . implode(', ', $providers));
@@ -746,7 +730,6 @@ public function tearDown() {
$this->setupUserMountProviders = [];
$this->setupMountProviderPaths = [];
$this->fullSetupRequired = [];
- $this->usersMountsUpdated = [];
$this->rootSetup = false;
$this->mountManager->clear();
$this->userMountCache->clear();
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index edc906feef7bd..163526cdfbd1a 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -47,7 +47,6 @@
use OCP\Share\Events\ShareCreatedEvent;
use OCP\Share\Events\ShareDeletedEvent;
use OCP\Share\Events\ShareDeletedFromSelfEvent;
-use OCP\Share\Events\ShareMovedEvent;
use OCP\Share\Exceptions\AlreadySharedException;
use OCP\Share\Exceptions\GenericShareException;
use OCP\Share\Exceptions\ShareNotFound;
@@ -1192,11 +1191,7 @@ public function moveShare(IShare $share, string $recipientId): IShare {
[$providerId,] = $this->splitFullId($share->getFullId());
$provider = $this->factory->getProvider($providerId);
- $result = $provider->move($share, $recipientId);
-
- $this->dispatchEvent(new ShareMovedEvent($share), 'share moved');
-
- return $result;
+ return $provider->move($share, $recipientId);
}
#[Override]
diff --git a/lib/private/Share20/Share.php b/lib/private/Share20/Share.php
index 7593ff45636de..1069d0a706c1c 100644
--- a/lib/private/Share20/Share.php
+++ b/lib/private/Share20/Share.php
@@ -64,8 +64,6 @@ class Share implements IShare {
private ?int $parent = null;
/** @var string */
private $target;
- /** @var string */
- private ?string $originalTarget = null;
/** @var \DateTime */
private $shareTime;
/** @var bool */
@@ -541,21 +539,10 @@ public function getParent(): ?int {
* @inheritdoc
*/
public function setTarget($target) {
- // if the target is changed, save the original target
- if ($this->target && !$this->originalTarget) {
- $this->originalTarget = $this->target;
- }
$this->target = $target;
return $this;
}
- /**
- * Return the original target, if this share was moved
- */
- public function getOriginalTarget(): ?string {
- return $this->originalTarget;
- }
-
/**
* @inheritdoc
*/
diff --git a/lib/public/Files/Events/UserHomeSetupEvent.php b/lib/public/Files/Events/UserHomeSetupEvent.php
deleted file mode 100644
index 2b49f64a28b92..0000000000000
--- a/lib/public/Files/Events/UserHomeSetupEvent.php
+++ /dev/null
@@ -1,46 +0,0 @@
-user;
- }
-
- /**
- * @since 34.0.0
- */
- public function getHomeMount(): IMountPoint {
- return $this->homeMount;
- }
-}
diff --git a/lib/public/Files/FileInfo.php b/lib/public/Files/FileInfo.php
index 117408f23bc63..95419d6354ac4 100644
--- a/lib/public/Files/FileInfo.php
+++ b/lib/public/Files/FileInfo.php
@@ -8,7 +8,6 @@
namespace OCP\Files;
use OCP\AppFramework\Attribute\Consumable;
-use OCP\Files\Cache\ICacheEntry;
use OCP\Files\Storage\IStorage;
/**
@@ -299,12 +298,4 @@ public function getParentId(): int;
* @since 28.0.0
*/
public function getMetadata(): array;
-
- /**
- * Get the filecache data for the file
- *
- * @return ICacheEntry
- * @since 34.0.0
- */
- public function getData(): ICacheEntry;
}
diff --git a/lib/public/Share/Events/ShareMovedEvent.php b/lib/public/Share/Events/ShareMovedEvent.php
deleted file mode 100644
index 36c020fc0c488..0000000000000
--- a/lib/public/Share/Events/ShareMovedEvent.php
+++ /dev/null
@@ -1,33 +0,0 @@
-share;
- }
-}
diff --git a/lib/public/Share/Events/ShareTransferredEvent.php b/lib/public/Share/Events/ShareTransferredEvent.php
deleted file mode 100644
index 06a7ac3759bae..0000000000000
--- a/lib/public/Share/Events/ShareTransferredEvent.php
+++ /dev/null
@@ -1,33 +0,0 @@
-share;
- }
-}
diff --git a/lib/public/Share/IShare.php b/lib/public/Share/IShare.php
index 0fc17958df10f..b268fd00758f3 100644
--- a/lib/public/Share/IShare.php
+++ b/lib/public/Share/IShare.php
@@ -553,13 +553,6 @@ public function getParent(): ?int;
*/
public function setTarget($target);
- /**
- * Return the original target, if this share was moved
- *
- * @since 33.0.0
- */
- public function getOriginalTarget(): ?string;
-
/**
* Get the target path of this share relative to the recipients user folder.
*
diff --git a/tests/lib/Files/ViewTest.php b/tests/lib/Files/ViewTest.php
index 72df3810f1909..5d431764a8cae 100644
--- a/tests/lib/Files/ViewTest.php
+++ b/tests/lib/Files/ViewTest.php
@@ -1550,9 +1550,6 @@ private function createTestMovableMountPoints($mountPoints) {
$storage->method('getStorageCache')->willReturnCallback(function () use ($storage) {
return new \OC\Files\Cache\Storage($storage, true, Server::get(IDBConnection::class));
});
- $storage->method('getCache')->willReturnCallback(function () use ($storage) {
- return new \OC\Files\Cache\Cache($storage);
- });
$mounts[] = $this->getMockBuilder(TestMoveableMountPoint::class)
->onlyMethods(['moveMount'])
@@ -1653,10 +1650,7 @@ public function testMoveMountPointIntoSharedFolder(): void {
$mount2->expects($this->once())
->method('moveMount')
- ->willReturnCallback(function ($target) use ($mount2) {
- $mount2->setMountPoint($target);
- return true;
- });
+ ->willReturn(true);
$view = new View('/' . $this->user . '/files/');
$view->mkdir('shareddir');
diff --git a/tests/lib/Mock/Config/MockAppConfig.php b/tests/lib/Mock/Config/MockAppConfig.php
deleted file mode 100644
index f601bf6dbc570..0000000000000
--- a/tests/lib/Mock/Config/MockAppConfig.php
+++ /dev/null
@@ -1,169 +0,0 @@
-config[$app][$key]);
- }
-
- public function getValues($app, $key): array {
- throw new \Exception('not implemented');
- }
-
- public function getFilteredValues($app): array {
- throw new \Exception('not implemented');
- }
-
- public function getApps(): array {
- return array_keys($this->config);
- }
-
- public function getKeys(string $app): array {
- return array_keys($this->config[$app] ?? []);
- }
-
- public function isSensitive(string $app, string $key, ?bool $lazy = false): bool {
- throw new \Exception('not implemented');
- }
-
- public function isLazy(string $app, string $key): bool {
- throw new \Exception('not implemented');
- }
-
- public function getAllValues(string $app, string $prefix = '', bool $filtered = false): array {
- throw new \Exception('not implemented');
- }
-
- public function searchValues(string $key, bool $lazy = false, ?int $typedAs = null): array {
- throw new \Exception('not implemented');
- }
-
- public function getValueString(string $app, string $key, string $default = '', bool $lazy = false): string {
- return (string)(($this->config[$app] ?? [])[$key] ?? $default);
- }
-
- public function getValueInt(string $app, string $key, int $default = 0, bool $lazy = false): int {
- return (int)(($this->config[$app] ?? [])[$key] ?? $default);
- }
-
- public function getValueFloat(string $app, string $key, float $default = 0, bool $lazy = false): float {
- return (float)(($this->config[$app] ?? [])[$key] ?? $default);
- }
-
- public function getValueBool(string $app, string $key, bool $default = false, bool $lazy = false): bool {
- return (bool)(($this->config[$app] ?? [])[$key] ?? $default);
- }
-
- public function getValueArray(string $app, string $key, array $default = [], bool $lazy = false): array {
- return ($this->config[$app] ?? [])[$key] ?? $default;
- }
-
- public function getValueType(string $app, string $key, ?bool $lazy = null): int {
- throw new \Exception('not implemented');
- }
-
- public function setValueString(string $app, string $key, string $value, bool $lazy = false, bool $sensitive = false): bool {
- $this->config[$app][$key] = $value;
- return true;
- }
-
- public function setValueInt(string $app, string $key, int $value, bool $lazy = false, bool $sensitive = false): bool {
- $this->config[$app][$key] = $value;
- return true;
- }
-
- public function setValueFloat(string $app, string $key, float $value, bool $lazy = false, bool $sensitive = false): bool {
- $this->config[$app][$key] = $value;
- return true;
- }
-
- public function setValueBool(string $app, string $key, bool $value, bool $lazy = false): bool {
- $this->config[$app][$key] = $value;
- return true;
- }
-
- public function setValueArray(string $app, string $key, array $value, bool $lazy = false, bool $sensitive = false): bool {
- $this->config[$app][$key] = $value;
- return true;
- }
-
- public function updateSensitive(string $app, string $key, bool $sensitive): bool {
- throw new \Exception('not implemented');
- }
-
- public function updateLazy(string $app, string $key, bool $lazy): bool {
- throw new \Exception('not implemented');
- }
-
- public function getDetails(string $app, string $key): array {
- throw new \Exception('not implemented');
- }
-
- public function convertTypeToInt(string $type): int {
- return match (strtolower($type)) {
- 'mixed' => IAppConfig::VALUE_MIXED,
- 'string' => IAppConfig::VALUE_STRING,
- 'integer' => IAppConfig::VALUE_INT,
- 'float' => IAppConfig::VALUE_FLOAT,
- 'boolean' => IAppConfig::VALUE_BOOL,
- 'array' => IAppConfig::VALUE_ARRAY,
- default => throw new AppConfigIncorrectTypeException('Unknown type ' . $type)
- };
- }
-
- public function convertTypeToString(int $type): string {
- $type &= ~self::VALUE_SENSITIVE;
-
- return match ($type) {
- IAppConfig::VALUE_MIXED => 'mixed',
- IAppConfig::VALUE_STRING => 'string',
- IAppConfig::VALUE_INT => 'integer',
- IAppConfig::VALUE_FLOAT => 'float',
- IAppConfig::VALUE_BOOL => 'boolean',
- IAppConfig::VALUE_ARRAY => 'array',
- default => throw new AppConfigIncorrectTypeException('Unknown numeric type ' . $type)
- };
- }
-
- public function deleteKey(string $app, string $key): void {
- if ($this->hasKey($app, $key)) {
- unset($this->config[$app][$key]);
- }
- }
-
- public function deleteApp(string $app): void {
- if (isset($this->config[$app])) {
- unset($this->config[$app]);
- }
- }
-
- public function clearCache(bool $reload = false): void {
- }
-
- public function searchKeys(string $app, string $prefix = '', bool $lazy = false): array {
- throw new \Exception('not implemented');
- }
-
- public function getKeyDetails(string $app, string $key): array {
- throw new \Exception('not implemented');
- }
-
- public function getAppInstalledVersions(bool $onlyEnabled = false): array {
- throw new \Exception('not implemented');
- }
-}
diff --git a/tests/lib/Mock/Config/MockUserConfig.php b/tests/lib/Mock/Config/MockUserConfig.php
deleted file mode 100644
index cc4619ef191ef..0000000000000
--- a/tests/lib/Mock/Config/MockUserConfig.php
+++ /dev/null
@@ -1,209 +0,0 @@
-config);
- }
-
- public function getApps(string $userId): array {
- return array_keys($this->config[$userId] ?? []);
- }
-
- public function getKeys(string $userId, string $app): array {
- if (isset($this->config[$userId][$app])) {
- return array_keys($this->config[$userId][$app]);
- } else {
- return [];
- }
- }
-
- public function hasKey(string $userId, string $app, string $key, ?bool $lazy = false): bool {
- return isset($this->config[$userId][$app][$key]);
- }
-
- public function isSensitive(string $userId, string $app, string $key, ?bool $lazy = false): bool {
- throw new \Exception('not implemented');
- }
-
- public function isIndexed(string $userId, string $app, string $key, ?bool $lazy = false): bool {
- throw new \Exception('not implemented');
- }
-
- public function isLazy(string $userId, string $app, string $key): bool {
- throw new \Exception('not implemented');
- }
-
- public function getValues(string $userId, string $app, string $prefix = '', bool $filtered = false): array {
- throw new \Exception('not implemented');
- }
-
- public function getAllValues(string $userId, bool $filtered = false): array {
- throw new \Exception('not implemented');
- }
-
- public function getValuesByApps(string $userId, string $key, bool $lazy = false, ?ValueType $typedAs = null): array {
- throw new \Exception('not implemented');
- }
-
- public function getValuesByUsers(string $app, string $key, ?ValueType $typedAs = null, ?array $userIds = null): array {
- throw new \Exception('not implemented');
- }
-
- public function searchUsersByValueString(string $app, string $key, string $value, bool $caseInsensitive = false): Generator {
- throw new \Exception('not implemented');
- }
-
- public function searchUsersByValueInt(string $app, string $key, int $value): Generator {
- throw new \Exception('not implemented');
- }
-
- public function searchUsersByValues(string $app, string $key, array $values): Generator {
- throw new \Exception('not implemented');
- }
-
- public function searchUsersByValueBool(string $app, string $key, bool $value): Generator {
- throw new \Exception('not implemented');
- }
-
- public function getValueString(string $userId, string $app, string $key, string $default = '', bool $lazy = false): string {
- if (isset($this->config[$userId][$app])) {
- return (string)$this->config[$userId][$app][$key];
- } else {
- return $default;
- }
- }
-
- public function getValueInt(string $userId, string $app, string $key, int $default = 0, bool $lazy = false): int {
- if (isset($this->config[$userId][$app])) {
- return (int)$this->config[$userId][$app][$key];
- } else {
- return $default;
- }
- }
-
- public function getValueFloat(string $userId, string $app, string $key, float $default = 0, bool $lazy = false): float {
- if (isset($this->config[$userId][$app])) {
- return (float)$this->config[$userId][$app][$key];
- } else {
- return $default;
- }
- }
-
- public function getValueBool(string $userId, string $app, string $key, bool $default = false, bool $lazy = false): bool {
- if (isset($this->config[$userId][$app])) {
- return (bool)$this->config[$userId][$app][$key];
- } else {
- return $default;
- }
- }
-
- public function getValueArray(string $userId, string $app, string $key, array $default = [], bool $lazy = false): array {
- if (isset($this->config[$userId][$app])) {
- return $this->config[$userId][$app][$key];
- } else {
- return $default;
- }
- }
-
- public function getValueType(string $userId, string $app, string $key, ?bool $lazy = null): ValueType {
- throw new \Exception('not implemented');
- }
-
- public function getValueFlags(string $userId, string $app, string $key, bool $lazy = false): int {
- throw new \Exception('not implemented');
- }
-
- public function setValueString(string $userId, string $app, string $key, string $value, bool $lazy = false, int $flags = 0): bool {
- $this->config[$userId][$app][$key] = $value;
- return true;
- }
-
- public function setValueInt(string $userId, string $app, string $key, int $value, bool $lazy = false, int $flags = 0): bool {
- $this->config[$userId][$app][$key] = $value;
- return true;
- }
-
- public function setValueFloat(string $userId, string $app, string $key, float $value, bool $lazy = false, int $flags = 0): bool {
- $this->config[$userId][$app][$key] = $value;
- return true;
- }
-
- public function setValueBool(string $userId, string $app, string $key, bool $value, bool $lazy = false): bool {
- $this->config[$userId][$app][$key] = $value;
- return true;
- }
-
- public function setValueArray(string $userId, string $app, string $key, array $value, bool $lazy = false, int $flags = 0): bool {
- $this->config[$userId][$app][$key] = $value;
- return true;
- }
-
- public function updateSensitive(string $userId, string $app, string $key, bool $sensitive): bool {
- throw new \Exception('not implemented');
- }
-
- public function updateGlobalSensitive(string $app, string $key, bool $sensitive): void {
- throw new \Exception('not implemented');
- }
-
- public function updateIndexed(string $userId, string $app, string $key, bool $indexed): bool {
- throw new \Exception('not implemented');
- }
-
- public function updateGlobalIndexed(string $app, string $key, bool $indexed): void {
- throw new \Exception('not implemented');
- }
-
- public function updateLazy(string $userId, string $app, string $key, bool $lazy): bool {
- throw new \Exception('not implemented');
- }
-
- public function updateGlobalLazy(string $app, string $key, bool $lazy): void {
- throw new \Exception('not implemented');
- }
-
- public function getDetails(string $userId, string $app, string $key): array {
- throw new \Exception('not implemented');
- }
-
- public function deleteUserConfig(string $userId, string $app, string $key): void {
- unset($this->config[$userId][$app][$key]);
- }
-
- public function deleteKey(string $app, string $key): void {
- throw new \Exception('not implemented');
- }
-
- public function deleteApp(string $app): void {
- throw new \Exception('not implemented');
- }
-
- public function deleteAllUserConfig(string $userId): void {
- unset($this->config[$userId]);
- }
-
- public function clearCache(string $userId, bool $reload = false): void {
- throw new \Exception('not implemented');
- }
-
- public function clearCacheAll(): void {
- throw new \Exception('not implemented');
- }
-}
diff --git a/tests/lib/TestCase.php b/tests/lib/TestCase.php
index 551c1024e0bef..6fb5bc309ed9b 100644
--- a/tests/lib/TestCase.php
+++ b/tests/lib/TestCase.php
@@ -13,7 +13,6 @@
use OC\Files\AppData\Factory;
use OC\Files\Cache\Storage;
use OC\Files\Config\MountProviderCollection;
-use OC\Files\Config\UserMountCache;
use OC\Files\Filesystem;
use OC\Files\Mount\CacheMountProvider;
use OC\Files\Mount\LocalHomeMountProvider;
@@ -181,8 +180,6 @@ protected function tearDown(): void {
Storage::getGlobalCache()->clearCache();
}
- Server::get(UserMountCache::class)->flush();
-
// tearDown the traits
$traits = $this->getTestTraits();
foreach ($traits as $trait) {