aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorprovokateurin <kate@provokateurin.de>2025-04-14 15:45:50 +0200
committerprovokateurin <kate@provokateurin.de>2025-05-05 13:23:11 +0200
commita55e61d97c09b80afb4748edacdb14966710d300 (patch)
treee39c09b52bea12ce32b194d1a80af46a8bb0cbad
parent8813df9623d27a0f8ff4c816a0148c08fcd325e0 (diff)
downloadnextcloud-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.php1
-rw-r--r--apps/dav/lib/Upload/RootCollection.php10
-rw-r--r--apps/dav/lib/Upload/UploadHome.php16
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) {