Skip to content

Commit 60b6904

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 6572605 commit 60b6904

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

apps/dav/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@
184184
'OCA\\DAV\\Comments\\RootCollection' => $baseDir . '/../lib/Comments/RootCollection.php',
185185
'OCA\\DAV\\Connector\\LegacyDAVACL' => $baseDir . '/../lib/Connector/LegacyDAVACL.php',
186186
'OCA\\DAV\\Connector\\LegacyPublicAuth' => $baseDir . '/../lib/Connector/LegacyPublicAuth.php',
187+
'OCA\\DAV\\Connector\\PermissionsTrait' => $baseDir . '/../lib/Connector/PermissionsTrait.php',
187188
'OCA\\DAV\\Connector\\Sabre\\AddExtraHeadersPlugin' => $baseDir . '/../lib/Connector/Sabre/AddExtraHeadersPlugin.php',
188189
'OCA\\DAV\\Connector\\Sabre\\AnonymousOptionsPlugin' => $baseDir . '/../lib/Connector/Sabre/AnonymousOptionsPlugin.php',
189190
'OCA\\DAV\\Connector\\Sabre\\AppleQuirksPlugin' => $baseDir . '/../lib/Connector/Sabre/AppleQuirksPlugin.php',

apps/dav/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ class ComposerStaticInitDAV
199199
'OCA\\DAV\\Comments\\RootCollection' => __DIR__ . '/..' . '/../lib/Comments/RootCollection.php',
200200
'OCA\\DAV\\Connector\\LegacyDAVACL' => __DIR__ . '/..' . '/../lib/Connector/LegacyDAVACL.php',
201201
'OCA\\DAV\\Connector\\LegacyPublicAuth' => __DIR__ . '/..' . '/../lib/Connector/LegacyPublicAuth.php',
202+
'OCA\\DAV\\Connector\\PermissionsTrait' => __DIR__ . '/..' . '/../lib/Connector/PermissionsTrait.php',
202203
'OCA\\DAV\\Connector\\Sabre\\AddExtraHeadersPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/AddExtraHeadersPlugin.php',
203204
'OCA\\DAV\\Connector\\Sabre\\AnonymousOptionsPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/AnonymousOptionsPlugin.php',
204205
'OCA\\DAV\\Connector\\Sabre\\AppleQuirksPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/AppleQuirksPlugin.php',
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace OCA\DAV\Connector;
6+
7+
trait PermissionsTrait {
8+
/**
9+
* Removes mount information from the permission string if isPublic is true.
10+
*/
11+
private function getPermissionString(bool $isPublic, string $permissions):
12+
string {
13+
return $isPublic ? str_replace(['S', 'M'], '', $permissions) : $permissions;
14+
}
15+
}

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)