diff options
author | Robin Appelman <robin@icewind.nl> | 2025-04-01 16:37:06 +0200 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2025-04-03 15:51:04 +0200 |
commit | 57cba2a3e4e79054895d13289f9be51e95368a1d (patch) | |
tree | d953bac4f0012f9e52a59d9d545aecc6ad88fa17 | |
parent | 807958448385880938cf5ce15a9dae65c3da29c8 (diff) | |
download | nextcloud-server-uploadfolder-rework-autofix.tar.gz nextcloud-server-uploadfolder-rework-autofix.zip |
fix: attempt to repair upload folder permissionsuploadfolder-rework-autofix
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r-- | apps/dav/lib/RootCollection.php | 1 | ||||
-rw-r--r-- | apps/dav/lib/Upload/RootCollection.php | 4 | ||||
-rw-r--r-- | apps/dav/lib/Upload/UploadHome.php | 9 |
3 files changed, 13 insertions, 1 deletions
diff --git a/apps/dav/lib/RootCollection.php b/apps/dav/lib/RootCollection.php index b2b34b26980..c8a47cd984f 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, + $logger, ); $uploadCollection->disableListing = $disableListing; diff --git a/apps/dav/lib/Upload/RootCollection.php b/apps/dav/lib/Upload/RootCollection.php index 9ea2592702b..5b33d07d77a 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 Psr\Log\LoggerInterface; 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 LoggerInterface $logger, ) { parent::__construct($principalBackend, $principalPrefix); } @@ -30,7 +32,7 @@ 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->logger); } /** diff --git a/apps/dav/lib/Upload/UploadHome.php b/apps/dav/lib/Upload/UploadHome.php index a6551d4d079..d38e3953720 100644 --- a/apps/dav/lib/Upload/UploadHome.php +++ b/apps/dav/lib/Upload/UploadHome.php @@ -9,10 +9,12 @@ namespace OCA\DAV\Upload; use OC\Files\View; use OCA\DAV\Connector\Sabre\Directory; +use OCP\Constants; use OCP\Files\Folder; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\IUserSession; +use Psr\Log\LoggerInterface; use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\ICollection; @@ -24,6 +26,7 @@ class UploadHome implements ICollection { private readonly CleanupService $cleanupService, private readonly IRootFolder $rootFolder, private readonly IUserSession $userSession, + private readonly LoggerInterface $logger, ) { } @@ -91,6 +94,12 @@ class UploadHome implements ICollection { private function impl(): Directory { $folder = $this->getUploadFolder(); + if (!$folder->isCreatable()) { + $user = $this->userSession->getUser(); + $this->logger->warning('Upload home not writable for ' . $user->getUID() . ', attempting to fix', ['permissions' => $folder->getPermissions()]); + $cache = $folder->getStorage()->getCache(); + $cache->update($folder->getId(), ['permissions', Constants::PERMISSION_ALL]); + } $view = new View($folder->getPath()); return new Directory($view, $folder); } |