diff options
-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(); } } |