From 7a88cb070949f8df23803412f0c50bc1174388d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Mon, 19 Jan 2026 11:22:17 +0100 Subject: [PATCH] fix(files_sharing): Switch back event path to be relative to user folder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is clearly the original intent, the parameter name in ViewOnly is $userFolder, and the similar event for single file download uses paths relative to user folder as well. Signed-off-by: Côme Chilliet --- .../lib/Listener/BeforeZipCreatedListener.php | 2 +- apps/files_sharing/lib/ViewOnly.php | 2 +- lib/public/Files/Events/BeforeZipCreatedEvent.php | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/files_sharing/lib/Listener/BeforeZipCreatedListener.php b/apps/files_sharing/lib/Listener/BeforeZipCreatedListener.php index 882da07dcdd..b6339c34208 100644 --- a/apps/files_sharing/lib/Listener/BeforeZipCreatedListener.php +++ b/apps/files_sharing/lib/Listener/BeforeZipCreatedListener.php @@ -48,7 +48,7 @@ class BeforeZipCreatedListener implements IEventListener { $user = $this->userSession->getUser(); if ($user) { $viewOnlyHandler = new ViewOnly( - $this->rootFolder + $this->rootFolder->getUserFolder($user->getUID()) ); if (!$viewOnlyHandler->check($pathsToCheck)) { $event->setErrorMessage('Access to this resource or one of its sub-items has been denied.'); diff --git a/apps/files_sharing/lib/ViewOnly.php b/apps/files_sharing/lib/ViewOnly.php index e075677248a..382eb190a89 100644 --- a/apps/files_sharing/lib/ViewOnly.php +++ b/apps/files_sharing/lib/ViewOnly.php @@ -24,7 +24,7 @@ class ViewOnly { } /** - * @param string[] $pathsToCheck + * @param string[] $pathsToCheck paths to check, relative to the user folder * @return bool */ public function check(array $pathsToCheck): bool { diff --git a/lib/public/Files/Events/BeforeZipCreatedEvent.php b/lib/public/Files/Events/BeforeZipCreatedEvent.php index 0363d385d36..34b315cf813 100644 --- a/lib/public/Files/Events/BeforeZipCreatedEvent.php +++ b/lib/public/Files/Events/BeforeZipCreatedEvent.php @@ -21,12 +21,13 @@ use OCP\Files\Folder; * @since 25.0.0 */ class BeforeZipCreatedEvent extends Event { - private string $directory; + private ?string $directory = null; private bool $successful = true; private ?string $errorMessage = null; private ?Folder $folder = null; /** + * @param string|Folder $directory Folder instance, or (deprecated) string path relative to user folder * @param list $files * @since 25.0.0 * @since 31.0.0 support `OCP\Files\Folder` as `$directory` parameter - passing a string is deprecated now @@ -37,7 +38,6 @@ class BeforeZipCreatedEvent extends Event { ) { parent::__construct(); if ($directory instanceof Folder) { - $this->directory = $directory->getPath(); $this->folder = $directory; } else { $this->directory = $directory; @@ -53,8 +53,13 @@ class BeforeZipCreatedEvent extends Event { /** * @since 25.0.0 + * @deprecated 33.0.0 Use getFolder instead and use node API + * @return string returns folder path relative to user folder */ public function getDirectory(): string { + if ($this->folder instanceof Folder) { + return preg_replace('|^/[^/]+/files/|', '/', $this->folder->getPath()); + } return $this->directory; }