fix: attempt to repair upload folder permissions

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2025-04-01 16:37:06 +02:00
parent 8079584483
commit 57cba2a3e4
No known key found for this signature in database
GPG key ID: 42B69D8A64526EFB
3 changed files with 13 additions and 1 deletions

View file

@ -160,6 +160,7 @@ class RootCollection extends SimpleCollection {
Server::get(CleanupService::class),
$rootFolder,
$userSession,
$logger,
);
$uploadCollection->disableListing = $disableListing;

View file

@ -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);
}
/**

View file

@ -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);
}