server = $server; $server->on('method:PATCH', [$this, 'httpPatch']); } public function getPluginName(): string { return 'checksumupdate'; } /** @return string[] */ public function getHTTPMethods($path): array { $tree = $this->server->tree; if ($tree->nodeExists($path)) { $node = $tree->getNodeForPath($path); if ($node instanceof File) { return ['PATCH']; } } return []; } /** @return string[] */ public function getFeatures(): array { return ['nextcloud-checksum-update']; } public function httpPatch(RequestInterface $request, ResponseInterface $response) { $path = $request->getPath(); $node = $this->server->tree->getNodeForPath($path); if ($node instanceof File) { $type = strtolower( (string)$request->getHeader('X-Recalculate-Hash') ); $hash = $node->hash($type); if ($hash) { $checksum = strtoupper($type) . ':' . $hash; $node->setChecksum($checksum); $response->addHeader('OC-Checksum', $checksum); $response->setHeader('Content-Length', '0'); $response->setStatus(Http::STATUS_NO_CONTENT); return false; } } } }