diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index c32ca5e326a32..a4b589684f6be 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -231,12 +231,14 @@ public function handleDownloadToken(RequestInterface $request, ResponseInterface public function httpGet(RequestInterface $request, ResponseInterface $response) { // only handle symlinks $node = $this->tree->getNodeForPath($request->getPath()); - if (!($node instanceof \OCP\Files\File && $this->symlinkManager->isSymlink($node))) { + if (!($node instanceof \OCA\DAV\Connector\Sabre\File && $this->symlinkManager->isSymlink($node->getFileInfo()))) { return; } - $response->addHeader('OC-File-Type', '1'); - $response->setBody($node->getContent()); + $response->setHeader('OC-File-Type', '1'); + $response->setHeader('OC-ETag', $node->getEtag()); + $response->setBody($node->get()); + $response->setStatus(200); // do not continue processing this request return false; } diff --git a/apps/dav/lib/Upload/SymlinkPlugin.php b/apps/dav/lib/Upload/SymlinkPlugin.php index e6bd327de8a7d..0cab6513d8720 100644 --- a/apps/dav/lib/Upload/SymlinkPlugin.php +++ b/apps/dav/lib/Upload/SymlinkPlugin.php @@ -78,13 +78,16 @@ public function httpPut(RequestInterface $request, ResponseInterface $response): public function httpDelete(RequestInterface $request, ResponseInterface $response): bool { $path = $request->getPath(); - $node = $this->server->tree->getNodeForPath(dirname($path)); - if (!$node instanceof \OCA\DAV\Connector\Sabre\File) { + $node = $this->server->tree->getNodeForPath($path); + if (!$node instanceof \OCA\DAV\Connector\Sabre\Node) { return true; } $info = $node->getFileInfo(); if ($this->symlinkManager->isSymlink($info)) { - $this->symlinkManager->deleteSymlink($info); + if (!$this->symlinkManager->deleteSymlink($info)) { + $symlinkName = $info->getName(); + throw new \Sabre\DAV\Exception\NotFound("Unable to delete symlink '$symlinkName'!"); + } } // always propagate to trigger deletion of regular file representing symlink in filesystem return true;