diff options
Diffstat (limited to 'apps/files_versions/lib/Sabre/RootCollection.php')
-rw-r--r-- | apps/files_versions/lib/Sabre/RootCollection.php | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/apps/files_versions/lib/Sabre/RootCollection.php b/apps/files_versions/lib/Sabre/RootCollection.php new file mode 100644 index 00000000000..1e7129f23da --- /dev/null +++ b/apps/files_versions/lib/Sabre/RootCollection.php @@ -0,0 +1,55 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\Files_Versions\Sabre; + +use OCA\Files_Versions\Versions\IVersionManager; +use OCP\Files\IRootFolder; +use OCP\IConfig; +use OCP\IUserManager; +use OCP\IUserSession; +use Sabre\DAV\INode; +use Sabre\DAVACL\AbstractPrincipalCollection; +use Sabre\DAVACL\PrincipalBackend; + +class RootCollection extends AbstractPrincipalCollection { + + public function __construct( + PrincipalBackend\BackendInterface $principalBackend, + private IRootFolder $rootFolder, + IConfig $config, + private IUserManager $userManager, + private IVersionManager $versionManager, + private IUserSession $userSession, + ) { + parent::__construct($principalBackend, 'principals/users'); + + $this->disableListing = !$config->getSystemValue('debug', false); + } + + /** + * This method returns a node for a principal. + * + * The passed array contains principal information, and is guaranteed to + * at least contain a uri item. Other properties may or may not be + * supplied by the authentication backend. + * + * @param array $principalInfo + * @return INode + */ + public function getChildForPrincipal(array $principalInfo) { + [, $name] = \Sabre\Uri\split($principalInfo['uri']); + $user = $this->userSession->getUser(); + if (is_null($user) || $name !== $user->getUID()) { + throw new \Sabre\DAV\Exception\Forbidden(); + } + return new VersionHome($principalInfo, $this->rootFolder, $this->userManager, $this->versionManager); + } + + public function getName() { + return 'versions'; + } +} |