diff options
author | Julius Härtl <jus@bitgrid.net> | 2023-11-09 11:08:11 +0100 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2023-11-09 11:08:11 +0100 |
commit | 0033ae52b8f57ecf201f15e12010a4099b592d86 (patch) | |
tree | eac15dd1e712f03f93b3c695325772a2813f0255 /apps/dav | |
parent | 48bfbf84ee3cf583d58fccb0b9ae57761db58901 (diff) | |
download | nextcloud-server-0033ae52b8f57ecf201f15e12010a4099b592d86.tar.gz nextcloud-server-0033ae52b8f57ecf201f15e12010a4099b592d86.zip |
fix: Validate that we have a proper distributed cache configured
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'apps/dav')
-rw-r--r-- | apps/dav/lib/Upload/ChunkingV2Plugin.php | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/apps/dav/lib/Upload/ChunkingV2Plugin.php b/apps/dav/lib/Upload/ChunkingV2Plugin.php index 97ae51fbe38..29017155d45 100644 --- a/apps/dav/lib/Upload/ChunkingV2Plugin.php +++ b/apps/dav/lib/Upload/ChunkingV2Plugin.php @@ -30,6 +30,8 @@ use InvalidArgumentException; use OC\Files\Filesystem; use OC\Files\ObjectStore\ObjectStoreStorage; use OC\Files\View; +use OC\Memcache\Memcached; +use OC\Memcache\Redis; use OC_Hook; use OCA\DAV\Connector\Sabre\Directory; use OCA\DAV\Connector\Sabre\File; @@ -40,6 +42,7 @@ use OCP\Files\Storage\IChunkedFileWrite; use OCP\Files\StorageInvalidException; use OCP\ICache; use OCP\ICacheFactory; +use OCP\IConfig; use OCP\Lock\ILockingProvider; use Sabre\DAV\Exception\BadRequest; use Sabre\DAV\Exception\InsufficientStorage; @@ -272,6 +275,11 @@ class ChunkingV2Plugin extends ServerPlugin { * @throws StorageInvalidException */ private function checkPrerequisites(bool $checkUploadMetadata = true): void { + $distributedCacheConfig = \OCP\Server::get(IConfig::class)->getSystemValue('memcache.distributed', null); + + if ($distributedCacheConfig === null || (!$this->cache instanceof Redis && !$this->cache instanceof Memcached)) { + throw new BadRequest('Skipping chunking v2 since no proper distributed cache is available'); + } if (!$this->uploadFolder instanceof UploadFolder || empty($this->server->httpRequest->getHeader(self::DESTINATION_HEADER))) { throw new BadRequest('Skipping chunked file writing as the destination header was not passed'); } @@ -284,7 +292,7 @@ class ChunkingV2Plugin extends ServerPlugin { if ($checkUploadMetadata) { if ($this->uploadId === null || $this->uploadPath === null) { - throw new PreconditionFailed('Missing metadata for chunked upload'); + throw new PreconditionFailed('Missing metadata for chunked upload. The distributed cache does not hold the information of previous requests.'); } } } |