Skip to content

Commit 716d880

Browse files
committed
fix: only validate mounts for new share
Signed-off-by: Robin Appelman <robin@icewind.nl>
1 parent 9cd337b commit 716d880

1 file changed

Lines changed: 18 additions & 7 deletions

File tree

apps/files_sharing/lib/Listener/SharesUpdatedListener.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use OCP\Share\Events\ShareCreatedEvent;
2323
use OCP\Share\Events\ShareTransferredEvent;
2424
use OCP\Share\IManager;
25+
use OCP\Share\IShare;
2526

2627
/**
2728
* Listen to various events that can change what shares a user has access to
@@ -47,13 +48,15 @@ public function handle(Event $event): void {
4748
if ($event instanceof UserAddedEvent || $event instanceof UserRemovedEvent) {
4849
$this->updateForUser($event->getUser());
4950
}
50-
if (
51-
$event instanceof ShareCreatedEvent
52-
|| $event instanceof BeforeShareDeletedEvent
53-
|| $event instanceof ShareTransferredEvent
54-
) {
55-
foreach ($this->shareManager->getUsersForShare($event->getShare()) as $user) {
56-
$this->updateForUser($user);
51+
if ($event instanceof ShareCreatedEvent || $event instanceof ShareTransferredEvent) {
52+
$share = $event->getShare();
53+
$shareTarget = $share->getTarget();
54+
foreach ($this->shareManager->getUsersForShare($share) as $user) {
55+
if ($share->getSharedBy() !== $user->getUID()) {
56+
$this->updateForShare($user, $share);
57+
// Share target validation might have changed the target, restore it for the next user
58+
$share->setTarget($shareTarget);
59+
}
5760
}
5861
}
5962
}
@@ -82,4 +85,12 @@ private function updateForUser(IUser $user): void {
8285

8386
unset($this->inUpdate[$user->getUID()]);
8487
}
88+
89+
private function updateForShare(IUser $user, IShare $share): void {
90+
$cachedMounts = $this->userMountCache->getMountsForUser($user);
91+
$mountPoints = array_map(fn (ICachedMountInfo $mount) => $mount->getMountPoint(), $cachedMounts);
92+
$mountsByPath = array_combine($mountPoints, $cachedMounts);
93+
94+
$this->shareTargetValidator->verifyMountPoint($user, $share, $mountsByPath, [$share]);
95+
}
8596
}

0 commit comments

Comments
 (0)