diff options
author | provokateurin <kate@provokateurin.de> | 2025-04-14 15:45:50 +0200 |
---|---|---|
committer | provokateurin <kate@provokateurin.de> | 2025-05-05 13:23:11 +0200 |
commit | a55e61d97c09b80afb4748edacdb14966710d300 (patch) | |
tree | e39c09b52bea12ce32b194d1a80af46a8bb0cbad | |
parent | 8813df9623d27a0f8ff4c816a0148c08fcd325e0 (diff) | |
download | nextcloud-server-a55e61d97c09b80afb4748edacdb14966710d300.tar.gz nextcloud-server-a55e61d97c09b80afb4748edacdb14966710d300.zip |
feat(dav): Allow UploadHome to handle public shares
Signed-off-by: provokateurin <kate@provokateurin.de>
-rw-r--r-- | apps/dav/lib/RootCollection.php | 1 | ||||
-rw-r--r-- | apps/dav/lib/Upload/RootCollection.php | 10 | ||||
-rw-r--r-- | apps/dav/lib/Upload/UploadHome.php | 16 |
3 files changed, 21 insertions, 6 deletions
diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php index b2b34b26980..f1963c0ef01 100644 --- a/apps/dav/lib/RootCollection.php +++ b/apps/dav/lib/RootCollection.php @@ -160,6 +160,7 @@ class RootCollection extends SimpleCollection { Server::get(CleanupService::class), $rootFolder, $userSession, + $shareManager, ); $uploadCollection->disableListing = $disableListing; diff --git a/apps/dav/lib/Upload/RootCollection.php b/apps/dav/lib/Upload/RootCollection.php index 9ea2592702b..cd7ab7f5e0a 100644 --- a/apps/dav/lib/Upload/RootCollection.php +++ b/apps/dav/lib/Upload/RootCollection.php @@ -11,6 +11,7 @@ namespace OCA\DAV\Upload; use OCP\Files\IRootFolder; use OCP\IUserSession; +use OCP\Share\IManager; use Sabre\DAVACL\AbstractPrincipalCollection; use Sabre\DAVACL\PrincipalBackend; @@ -22,6 +23,7 @@ class RootCollection extends AbstractPrincipalCollection { private CleanupService $cleanupService, private IRootFolder $rootFolder, private IUserSession $userSession, + private IManager $shareManager, ) { parent::__construct($principalBackend, $principalPrefix); } @@ -30,7 +32,13 @@ class RootCollection extends AbstractPrincipalCollection { * @inheritdoc */ public function getChildForPrincipal(array $principalInfo): UploadHome { - return new UploadHome($principalInfo, $this->cleanupService, $this->rootFolder, $this->userSession); + return new UploadHome( + $principalInfo, + $this->cleanupService, + $this->rootFolder, + $this->userSession, + $this->shareManager, + ); } /** diff --git a/apps/dav/lib/Upload/UploadHome.php b/apps/dav/lib/Upload/UploadHome.php index 06e26851207..4042f1c4101 100644 --- a/apps/dav/lib/Upload/UploadHome.php +++ b/apps/dav/lib/Upload/UploadHome.php @@ -25,13 +25,19 @@ class UploadHome implements ICollection { private readonly CleanupService $cleanupService, private readonly IRootFolder $rootFolder, private readonly IUserSession $userSession, + private readonly \OCP\Share\IManager $shareManager, ) { - $user = $this->userSession->getUser(); - if (!$user) { - throw new Forbidden('Not logged in'); - } + [$prefix, $name] = \Sabre\Uri\split($principalInfo['uri']); + if ($prefix === 'principals/shares') { + $this->uid = $this->shareManager->getShareByToken($name)->getShareOwner(); + } else { + $user = $this->userSession->getUser(); + if (!$user) { + throw new Forbidden('Not logged in'); + } - $this->uid = $user->getUID(); + $this->uid = $user->getUID(); + } } public function createFile($name, $data = null) { |