From f0aae14c83549bf39c71fd66252745bc41e1f93a Mon Sep 17 00:00:00 2001 From: Louis Chemineau Date: Wed, 25 Oct 2023 16:17:26 +0200 Subject: [PATCH] Filter out some permission for public albums Signed-off-by: Louis Chemineau --- lib/Sabre/PropFindPlugin.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/Sabre/PropFindPlugin.php b/lib/Sabre/PropFindPlugin.php index b94a3a07e..abf915a24 100644 --- a/lib/Sabre/PropFindPlugin.php +++ b/lib/Sabre/PropFindPlugin.php @@ -28,6 +28,7 @@ use OCA\Photos\Album\AlbumMapper; use OCA\Photos\Sabre\Album\AlbumPhoto; use OCA\Photos\Sabre\Album\AlbumRoot; +use OCA\Photos\Sabre\Album\PublicAlbumPhoto; use OCA\Photos\Sabre\Place\PlacePhoto; use OCA\Photos\Sabre\Place\PlaceRoot; use OCP\Files\DavUtil; @@ -109,8 +110,17 @@ public function propFind(PropFind $propFind, INode $node): void { $propFind->handle(self::FILE_NAME_PROPERTYNAME, fn () => $node->getFile()->getName()); $propFind->handle(self::FAVORITE_PROPERTYNAME, fn () => $node->isFavorite() ? 1 : 0); $propFind->handle(FilesPlugin::HAS_PREVIEW_PROPERTYNAME, fn () => json_encode($this->previewManager->isAvailable($fileInfo))); - // Remove G permission as it does not make sense in the context of photos. - $propFind->handle(FilesPlugin::PERMISSIONS_PROPERTYNAME, fn () => str_replace('G', '', DavUtil::getDavPermissions($node->getFileInfo()))); + $propFind->handle(FilesPlugin::PERMISSIONS_PROPERTYNAME, function () use ($node): string { + $permissions = DavUtil::getDavPermissions($node->getFileInfo()); + $filteredPermissions = str_replace('R', '', $permissions); + + if ($node instanceof PublicAlbumPhoto) { + $filteredPermissions = str_replace('D', '', $filteredPermissions); + $filteredPermissions = str_replace('NV', '', $filteredPermissions); + $filteredPermissions = str_replace('W', '', $filteredPermissions); + } + return $filteredPermissions; + }); if ($this->metadataEnabled) { $propFind->handle(FilesPlugin::FILE_METADATA_SIZE, function () use ($node) {