diff options
author | Robin Appelman <robin@icewind.nl> | 2025-02-24 19:22:52 +0100 |
---|---|---|
committer | backportbot[bot] <backportbot[bot]@users.noreply.github.com> | 2025-02-26 13:35:31 +0000 |
commit | f910a39b1f6a1c1d553c7f749957b7d9c45964ea (patch) | |
tree | 6728014a91f012b985d2a6253f97cc0e8bf10269 | |
parent | 5498f99b119d984ffaa359f39cf68ccc411fd7dc (diff) | |
download | nextcloud-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.php | 4 | ||||
-rw-r--r-- | apps/dav/lib/Upload/UploadHome.php | 30 |
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(); } } |