diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2024-10-07 17:31:39 +0200 |
---|---|---|
committer | Ferdinand Thiessen <opensource@fthiessen.de> | 2024-10-07 17:31:39 +0200 |
commit | bf63db1e8bddb8d23c3e480f4e955c5a4ffa6cad (patch) | |
tree | 4c4e99f34f70dbfc594ef3fbfba96df6d73decd4 | |
parent | 4bcbe8a894218f99a3b4426d36577928cdeea8cd (diff) | |
download | nextcloud-server-refactor/zip-event.tar.gz nextcloud-server-refactor/zip-event.zip |
refactor(files_sharing): Handle access to shares using the direct download endpointrefactor/zip-event
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
-rw-r--r-- | apps/files_sharing/lib/Listener/BeforeDirectFileDownloadListener.php | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/apps/files_sharing/lib/Listener/BeforeDirectFileDownloadListener.php b/apps/files_sharing/lib/Listener/BeforeDirectFileDownloadListener.php index 717edd4869e..4b79c5b59c1 100644 --- a/apps/files_sharing/lib/Listener/BeforeDirectFileDownloadListener.php +++ b/apps/files_sharing/lib/Listener/BeforeDirectFileDownloadListener.php @@ -9,11 +9,13 @@ declare(strict_types=1); namespace OCA\Files_Sharing\Listener; +use OCA\Files_Sharing\Services\ShareAccessService; use OCA\Files_Sharing\ViewOnly; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\Files\Events\BeforeDirectFileDownloadEvent; use OCP\Files\IRootFolder; +use OCP\Files\Storage\ISharedStorage; use OCP\IUserSession; /** @@ -24,6 +26,7 @@ class BeforeDirectFileDownloadListener implements IEventListener { public function __construct( private IUserSession $userSession, private IRootFolder $rootFolder, + private ShareAccessService $accessService, ) { } @@ -42,6 +45,19 @@ class BeforeDirectFileDownloadListener implements IEventListener { if (!$viewOnlyHandler->check($pathsToCheck)) { $event->setSuccessful(false); $event->setErrorMessage('Access to this resource or one of its sub-items has been denied.'); + return; + } + } + + $node = $event->getNode(); + if ($node !== null) { + $storage = $node->getStorage(); + if ($storage->instanceOfStorage(ISharedStorage::class)) { + /** @var ISharedStorage $storage */ + $share = $storage->getShare(); + $this->accessService->shareDownloaded($share); + // All we now need to do is log the download + $this->accessService->sharedFileDownloaded($share, $node); } } } |