aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2025-02-24 19:22:52 +0100
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2025-02-26 13:35:31 +0000
commitf910a39b1f6a1c1d553c7f749957b7d9c45964ea (patch)
tree6728014a91f012b985d2a6253f97cc0e8bf10269
parent5498f99b119d984ffaa359f39cf68ccc411fd7dc (diff)
downloadnextcloud-server-backport/51010/stable30.tar.gz
nextcloud-server-backport/51010/stable30.zip
fix: rework UploadFolder implementationbackport/51010/stable30
Signed-off-by: Robin Appelman <robin@icewind.nl> [skip ci]
-rw-r--r--apps/dav/lib/Upload/RootCollection.php4
-rw-r--r--apps/dav/lib/Upload/UploadHome.php30
2 files changed, 22 insertions, 12 deletions
diff --git a/apps/dav/lib/Upload/RootCollection.php b/apps/dav/lib/Upload/RootCollection.php
index 1adab40671b..8b091cd845d 100644
--- a/apps/dav/lib/Upload/RootCollection.php
+++ b/apps/dav/lib/Upload/RootCollection.php
@@ -9,6 +9,8 @@ declare(strict_types=1);
*/
namespace OCA\DAV\Upload;
+use OCP\Files\IRootFolder;
+use OCP\IUserSession;
use Sabre\DAVACL\AbstractPrincipalCollection;
use Sabre\DAVACL\PrincipalBackend;
@@ -28,7 +30,7 @@ class RootCollection extends AbstractPrincipalCollection {
* @inheritdoc
*/
public function getChildForPrincipal(array $principalInfo): UploadHome {
- return new UploadHome($principalInfo, $this->cleanupService);
+ return new UploadHome($principalInfo, $this->cleanupService, $this->rootFolder, $this->userSession);
}
/**
diff --git a/apps/dav/lib/Upload/UploadHome.php b/apps/dav/lib/Upload/UploadHome.php
index 3e7e3c6c986..f50ad502378 100644
--- a/apps/dav/lib/Upload/UploadHome.php
+++ b/apps/dav/lib/Upload/UploadHome.php
@@ -7,7 +7,6 @@
*/
namespace OCA\DAV\Upload;
-use OC\Files\Filesystem;
use OC\Files\View;
use OCA\DAV\Connector\Sabre\Directory;
use Sabre\DAV\Exception\Forbidden;
@@ -66,13 +65,24 @@ class UploadHome implements ICollection {
return $this->impl()->getLastModified();
}
- /**
- * @return Directory
- */
- private function impl() {
- $view = $this->getView();
- $rootInfo = $view->getFileInfo('');
- return new Directory($view, $rootInfo);
+ private function getUploadFolder(): Folder {
+ if ($this->uploadFolder === null) {
+ $user = $this->userSession->getUser();
+ if (!$user) {
+ throw new Forbidden('Not logged in');
+ }
+ $path = '/' . $user->getUID() . '/uploads';
+ try {
+ $folder = $this->rootFolder->get($path);
+ if (!$folder instanceof Folder) {
+ throw new \Exception('Upload folder is a file');
+ }
+ $this->uploadFolder = $folder;
+ } catch (NotFoundException $e) {
+ $this->uploadFolder = $this->rootFolder->newFolder($path);
+ }
+ }
+ return $this->uploadFolder;
}
private function getView() {
@@ -86,8 +96,6 @@ class UploadHome implements ICollection {
}
private function getStorage() {
- $view = $this->getView();
- $storage = $view->getFileInfo('')->getStorage();
- return $storage;
+ return $this->getUploadFolder()->getStorage();
}
}