Skip to content

Commit a075b23

Browse files
committed
refactor: extract logic to hide mounts and share information
The permission string for directories and files can contain M or S depending if they are respectively coming from a mount or a share. This information is not to be disclosed when the share is a public one. Signed-off-by: Salvatore Martire <[email protected]>
1 parent 594d220 commit a075b23

File tree

4 files changed

+27
-6
lines changed

4 files changed

+27
-6
lines changed

apps/dav/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@
209209
'OCA\\DAV\\ConfigLexicon' => $baseDir . '/../lib/ConfigLexicon.php',
210210
'OCA\\DAV\\Connector\\LegacyDAVACL' => $baseDir . '/../lib/Connector/LegacyDAVACL.php',
211211
'OCA\\DAV\\Connector\\LegacyPublicAuth' => $baseDir . '/../lib/Connector/LegacyPublicAuth.php',
212+
'OCA\\DAV\\Connector\\PermissionsTrait' => $baseDir . '/../lib/Connector/PermissionsTrait.php',
212213
'OCA\\DAV\\Connector\\Sabre\\AnonymousOptionsPlugin' => $baseDir . '/../lib/Connector/Sabre/AnonymousOptionsPlugin.php',
213214
'OCA\\DAV\\Connector\\Sabre\\AppleQuirksPlugin' => $baseDir . '/../lib/Connector/Sabre/AppleQuirksPlugin.php',
214215
'OCA\\DAV\\Connector\\Sabre\\Auth' => $baseDir . '/../lib/Connector/Sabre/Auth.php',

apps/dav/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ class ComposerStaticInitDAV
224224
'OCA\\DAV\\ConfigLexicon' => __DIR__ . '/..' . '/../lib/ConfigLexicon.php',
225225
'OCA\\DAV\\Connector\\LegacyDAVACL' => __DIR__ . '/..' . '/../lib/Connector/LegacyDAVACL.php',
226226
'OCA\\DAV\\Connector\\LegacyPublicAuth' => __DIR__ . '/..' . '/../lib/Connector/LegacyPublicAuth.php',
227+
'OCA\\DAV\\Connector\\PermissionsTrait' => __DIR__ . '/..' . '/../lib/Connector/PermissionsTrait.php',
227228
'OCA\\DAV\\Connector\\Sabre\\AnonymousOptionsPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/AnonymousOptionsPlugin.php',
228229
'OCA\\DAV\\Connector\\Sabre\\AppleQuirksPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/AppleQuirksPlugin.php',
229230
'OCA\\DAV\\Connector\\Sabre\\Auth' => __DIR__ . '/..' . '/../lib/Connector/Sabre/Auth.php',
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
namespace OCA\DAV\Connector;
10+
11+
trait PermissionsTrait {
12+
/**
13+
* Removes mount information from the permission string if isPublic is true.
14+
*/
15+
private function getPermissionString(bool $isPublic, string $permissions):
16+
string {
17+
return $isPublic ? str_replace(['S', 'M'], '', $permissions) : $permissions;
18+
}
19+
}

apps/dav/lib/Connector/Sabre/FilesPlugin.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use OC\AppFramework\Http\Request;
1111
use OC\FilesMetadata\Model\FilesMetadata;
1212
use OC\User\NoUserException;
13+
use OCA\DAV\Connector\PermissionsTrait;
1314
use OCA\DAV\Connector\Sabre\Exception\InvalidPath;
1415
use OCA\Files_Sharing\External\Mount as SharingExternalMount;
1516
use OCP\Accounts\IAccountManager;
@@ -40,6 +41,9 @@
4041
use Sabre\HTTP\ResponseInterface;
4142

4243
class FilesPlugin extends ServerPlugin {
44+
45+
use PermissionsTrait;
46+
4347
// namespace
4448
public const NS_OWNCLOUD = 'http://owncloud.org/ns';
4549
public const NS_NEXTCLOUD = 'http://nextcloud.org/ns';
@@ -314,12 +318,8 @@ public function handleGetProperties(PropFind $propFind, \Sabre\DAV\INode $node)
314318
});
315319

316320
$propFind->handle(self::PERMISSIONS_PROPERTYNAME, function () use ($node) {
317-
$perms = $node->getDavPermissions();
318-
if ($this->isPublic) {
319-
// remove mount information
320-
$perms = str_replace(['S', 'M'], '', $perms);
321-
}
322-
return $perms;
321+
return $this->getPermissionString($this->isPublic,
322+
$node->getDavPermissions());
323323
});
324324

325325
$propFind->handle(self::SHARE_PERMISSIONS_PROPERTYNAME, function () use ($node, $httpRequest) {

0 commit comments

Comments
 (0)