mirror of
https://github.com/nextcloud/server.git
synced 2026-02-03 20:41:22 -05:00
Merge 48a23feb1a into d09b8c99de
This commit is contained in:
commit
76ad8ac88e
6 changed files with 54 additions and 13 deletions
|
|
@ -18,6 +18,7 @@ use OCA\Encryption\Util;
|
|||
use OCA\Files\Exception\TransferOwnershipException;
|
||||
use OCA\Files_External\Config\ConfigAdapter;
|
||||
use OCP\Encryption\IManager as IEncryptionManager;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\Config\IHomeMountProvider;
|
||||
use OCP\Files\Config\IUserMountCache;
|
||||
use OCP\Files\File;
|
||||
|
|
@ -30,6 +31,7 @@ use OCP\IUser;
|
|||
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;
|
||||
|
|
@ -52,6 +54,7 @@ class OwnershipTransferService {
|
|||
private IUserManager $userManager,
|
||||
private IFactory $l10nFactory,
|
||||
private IRootFolder $rootFolder,
|
||||
private IEventDispatcher $eventDispatcher,
|
||||
) {
|
||||
}
|
||||
|
||||
|
|
@ -544,6 +547,7 @@ class OwnershipTransferService {
|
|||
} catch (\Throwable $e) {
|
||||
$output->writeln('<error>Could not restore share with id ' . $share->getId() . ':' . $e->getMessage() . ' : ' . $e->getTraceAsString() . '</error>');
|
||||
}
|
||||
$this->eventDispatcher->dispatchTyped(new ShareTransferredEvent($share));
|
||||
$progress->advance();
|
||||
}
|
||||
$progress->finish();
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ use OCP\Files\Config\IMountProviderCollection;
|
|||
use OCP\Files\Events\BeforeDirectFileDownloadEvent;
|
||||
use OCP\Files\Events\BeforeZipCreatedEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeReadEvent;
|
||||
use OCP\Files\Events\Node\FilesystemTornDownEvent;
|
||||
use OCP\Group\Events\GroupChangedEvent;
|
||||
use OCP\Group\Events\GroupDeletedEvent;
|
||||
use OCP\Group\Events\UserAddedEvent;
|
||||
|
|
@ -57,6 +56,7 @@ use OCP\IDBConnection;
|
|||
use OCP\IGroup;
|
||||
use OCP\Share\Events\BeforeShareDeletedEvent;
|
||||
use OCP\Share\Events\ShareCreatedEvent;
|
||||
use OCP\Share\Events\ShareTransferredEvent;
|
||||
use OCP\User\Events\UserChangedEvent;
|
||||
use OCP\User\Events\UserDeletedEvent;
|
||||
use OCP\Util;
|
||||
|
|
@ -117,10 +117,10 @@ class Application extends App implements IBootstrap {
|
|||
// 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(UserShareAccessUpdatedEvent::class, SharesUpdatedListener::class);
|
||||
$context->registerEventListener(FilesystemTornDownEvent::class, SharesUpdatedListener::class);
|
||||
|
||||
$context->registerConfigLexicon(ConfigLexicon::class);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,26 +11,25 @@ namespace OCA\Files_Sharing\Listener;
|
|||
use OCA\Files_Sharing\Event\UserShareAccessUpdatedEvent;
|
||||
use OCA\Files_Sharing\MountProvider;
|
||||
use OCA\Files_Sharing\ShareTargetValidator;
|
||||
use OCP\Cache\CappedMemoryCache;
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
use OCP\Files\Config\ICachedMountInfo;
|
||||
use OCP\Files\Config\IUserMountCache;
|
||||
use OCP\Files\Events\Node\FilesystemTornDownEvent;
|
||||
use OCP\Group\Events\UserAddedEvent;
|
||||
use OCP\Group\Events\UserRemovedEvent;
|
||||
use OCP\IUser;
|
||||
use OCP\Share\Events\BeforeShareDeletedEvent;
|
||||
use OCP\Share\Events\ShareCreatedEvent;
|
||||
use OCP\Share\Events\ShareTransferredEvent;
|
||||
use OCP\Share\IManager;
|
||||
|
||||
/**
|
||||
* Listen to various events that can change what shares a user has access to
|
||||
*
|
||||
* @template-implements IEventListener<UserAddedEvent|UserRemovedEvent|ShareCreatedEvent|BeforeShareDeletedEvent|UserShareAccessUpdatedEvent|FilesystemTornDownEvent>
|
||||
* @template-implements IEventListener<UserAddedEvent|UserRemovedEvent|ShareCreatedEvent|ShareTransferredEvent|BeforeShareDeletedEvent|UserShareAccessUpdatedEvent>
|
||||
*/
|
||||
class SharesUpdatedListener implements IEventListener {
|
||||
private CappedMemoryCache $updatedUsers;
|
||||
private array $inUpdate = [];
|
||||
|
||||
public function __construct(
|
||||
private readonly IManager $shareManager,
|
||||
|
|
@ -38,12 +37,8 @@ class SharesUpdatedListener implements IEventListener {
|
|||
private readonly MountProvider $shareMountProvider,
|
||||
private readonly ShareTargetValidator $shareTargetValidator,
|
||||
) {
|
||||
$this->updatedUsers = new CappedMemoryCache();
|
||||
}
|
||||
public function handle(Event $event): void {
|
||||
if ($event instanceof FilesystemTornDownEvent) {
|
||||
$this->updatedUsers = new CappedMemoryCache();
|
||||
}
|
||||
if ($event instanceof UserShareAccessUpdatedEvent) {
|
||||
foreach ($event->getUsers() as $user) {
|
||||
$this->updateForUser($user);
|
||||
|
|
@ -52,7 +47,11 @@ class SharesUpdatedListener implements IEventListener {
|
|||
if ($event instanceof UserAddedEvent || $event instanceof UserRemovedEvent) {
|
||||
$this->updateForUser($event->getUser());
|
||||
}
|
||||
if ($event instanceof ShareCreatedEvent || $event instanceof BeforeShareDeletedEvent) {
|
||||
if (
|
||||
$event instanceof ShareCreatedEvent
|
||||
|| $event instanceof BeforeShareDeletedEvent
|
||||
|| $event instanceof ShareTransferredEvent
|
||||
) {
|
||||
foreach ($this->shareManager->getUsersForShare($event->getShare()) as $user) {
|
||||
$this->updateForUser($user);
|
||||
}
|
||||
|
|
@ -60,10 +59,11 @@ class SharesUpdatedListener implements IEventListener {
|
|||
}
|
||||
|
||||
private function updateForUser(IUser $user): void {
|
||||
if (isset($this->updatedUsers[$user->getUID()])) {
|
||||
// prevent recursion
|
||||
if (isset($this->inUpdate[$user->getUID()])) {
|
||||
return;
|
||||
}
|
||||
$this->updatedUsers[$user->getUID()] = true;
|
||||
$this->inUpdate[$user->getUID()] = true;
|
||||
|
||||
$cachedMounts = $this->userMountCache->getMountsForUser($user);
|
||||
$mountPoints = array_map(fn (ICachedMountInfo $mount) => $mount->getMountPoint(), $cachedMounts);
|
||||
|
|
@ -79,5 +79,7 @@ class SharesUpdatedListener implements IEventListener {
|
|||
$this->shareTargetValidator->verifyMountPoint($user, $parentShare, $mountsByPath, $groupedShares);
|
||||
}
|
||||
}
|
||||
|
||||
unset($this->inUpdate[$user->getUID()]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -847,6 +847,7 @@ return array(
|
|||
'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\\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',
|
||||
|
|
|
|||
|
|
@ -888,6 +888,7 @@ 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\\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',
|
||||
|
|
|
|||
33
lib/public/Share/Events/ShareTransferredEvent.php
Normal file
33
lib/public/Share/Events/ShareTransferredEvent.php
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
namespace OCP\Share\Events;
|
||||
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\Share\IShare;
|
||||
|
||||
/**
|
||||
* @since 33.0.0
|
||||
*/
|
||||
class ShareTransferredEvent extends Event {
|
||||
/**
|
||||
* @since 33.0.0
|
||||
*/
|
||||
public function __construct(
|
||||
private readonly IShare $share,
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 33.0.0
|
||||
*/
|
||||
public function getShare(): IShare {
|
||||
return $this->share;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue