diff options
author | wronny <github@wron.de> | 2023-11-30 21:57:57 +0100 |
---|---|---|
committer | wronny <github@wron.de> | 2023-11-30 22:01:19 +0100 |
commit | d902486c53456d9800dd9cc7471039c94552382c (patch) | |
tree | d390f9c6d68f1272e98ea94d33201dc81f40d11b | |
parent | 254914a7358a8dbdfe18580cf876c126383cb4ef (diff) | |
download | nextcloud-server-d902486c53456d9800dd9cc7471039c94552382c.tar.gz nextcloud-server-d902486c53456d9800dd9cc7471039c94552382c.zip |
optionally hide hidden files if accessed via public share
config.php setting: hide_hidden_files_via_public_share_access true|false
(default = false)
Signed-off-by: wronny <github@wron.de>
-rw-r--r-- | lib/private/Files/Cache/Cache.php | 28 | ||||
-rw-r--r-- | lib/private/Files/View.php | 12 |
2 files changed, 39 insertions, 1 deletions
diff --git a/lib/private/Files/Cache/Cache.php b/lib/private/Files/Cache/Cache.php index 052b3c75ce8..9a831512bb7 100644 --- a/lib/private/Files/Cache/Cache.php +++ b/lib/private/Files/Cache/Cache.php @@ -258,6 +258,34 @@ class Cache implements ICache { } /** + * get the metadata of all files stored in $folder except hidden files + * + * @param int $fileId the file id of the folder + * @return ICacheEntry[] + */ + public function getFolderContentsByIdExceptHidden($fileId) { + if ($fileId > -1) { + $query = $this->getQueryBuilder(); + $query->selectFileCache() + ->whereParent($fileId) + ->andWhere($query->expr()->notlike('name', $query->createNamedParameter('.%'))) + ->orderBy('name', 'ASC'); + + $metadataQuery = $query->selectMetadata(); + + $result = $query->execute(); + $files = $result->fetchAll(); + $result->closeCursor(); + + return array_map(function (array $data) use ($metadataQuery) { + $data['metadata'] = $metadataQuery?->extractMetadata($data)->asArray() ?? []; + return self::cacheEntryFromData($data, $this->mimetypeLoader); + }, $files); + } + return []; + } + + /** * insert or update meta data for a file or folder * * @param string $file diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php index 6eefb093795..ec978016b81 100644 --- a/lib/private/Files/View.php +++ b/lib/private/Files/View.php @@ -66,6 +66,7 @@ use OCP\Files\Mount\IMountPoint; use OCP\Files\NotFoundException; use OCP\Files\ReservedWordException; use OCP\Files\Storage\IStorage; +use OCP\IConfig; use OCP\IUser; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; @@ -95,6 +96,9 @@ class View { private UserManager $userManager; private LoggerInterface $logger; + /** @var IConfig */ + protected $config; + /** * @throws \Exception If $root contains an invalid path */ @@ -103,6 +107,7 @@ class View { throw new \Exception(); } + $this->config = \OC::$server->getConfig(); $this->fakeRoot = $root; $this->lockingProvider = \OC::$server->getLockingProvider(); $this->lockingEnabled = !($this->lockingProvider instanceof \OC\Lock\NoopLockingProvider); @@ -1454,7 +1459,12 @@ class View { } $folderId = $data->getId(); - $contents = $cache->getFolderContentsById($folderId); //TODO: mimetype_filter + $systemConfigHideHiddenFilesViaPublicShareAccess = $this->config->getSystemValueBool('hide_hidden_files_via_public_share_access', false); + if ( $_SERVER['REQUEST_URI'] === "/public.php/webdav/" && $systemConfigHideHiddenFilesViaPublicShareAccess ){ + $contents = $cache->getFolderContentsByIdExceptHidden($folderId); //TODO: mimetype_filter + }else{ + $contents = $cache->getFolderContentsById($folderId); //TODO: mimetype_filter + } $sharingDisabled = \OCP\Util::isSharingDisabledForUser(); |