diff options
author | Joas Schilling <213943+nickvergessen@users.noreply.github.com> | 2024-05-06 08:16:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-06 08:16:18 +0200 |
commit | 137d4617cb153db81b541b1dc98c1f33b5cdcd30 (patch) | |
tree | df7d055f7360f916d8be74e75c7a0fba078c454f /apps/dav/lib | |
parent | 48f3b9146ee03011b666309b708e0f5b075af3cd (diff) | |
parent | 368769aa5ac88922e35d482bf7d27da1c2425d94 (diff) | |
download | nextcloud-server-137d4617cb153db81b541b1dc98c1f33b5cdcd30.tar.gz nextcloud-server-137d4617cb153db81b541b1dc98c1f33b5cdcd30.zip |
Merge pull request #45018 from nextcloud/backport/45001/stable29
[stable29] fix(DAV): Migrate known exceptions to Sabre exceptions when copying
Diffstat (limited to 'apps/dav/lib')
-rw-r--r-- | apps/dav/lib/Connector/Sabre/Directory.php | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/apps/dav/lib/Connector/Sabre/Directory.php b/apps/dav/lib/Connector/Sabre/Directory.php index e40b8d760eb..5bfc3e49e42 100644 --- a/apps/dav/lib/Connector/Sabre/Directory.php +++ b/apps/dav/lib/Connector/Sabre/Directory.php @@ -469,20 +469,28 @@ class Directory extends \OCA\DAV\Connector\Sabre\Node implements \Sabre\DAV\ICol public function copyInto($targetName, $sourcePath, INode $sourceNode) { if ($sourceNode instanceof File || $sourceNode instanceof Directory) { - $destinationPath = $this->getPath() . '/' . $targetName; - $sourcePath = $sourceNode->getPath(); + try { + $destinationPath = $this->getPath() . '/' . $targetName; + $sourcePath = $sourceNode->getPath(); - if (!$this->fileView->isCreatable($this->getPath())) { - throw new \Sabre\DAV\Exception\Forbidden(); - } + if (!$this->fileView->isCreatable($this->getPath())) { + throw new \Sabre\DAV\Exception\Forbidden(); + } - try { - $this->fileView->verifyPath($this->getPath(), $targetName); - } catch (InvalidPathException $ex) { - throw new InvalidPath($ex->getMessage()); - } + try { + $this->fileView->verifyPath($this->getPath(), $targetName); + } catch (InvalidPathException $ex) { + throw new InvalidPath($ex->getMessage()); + } - return $this->fileView->copy($sourcePath, $destinationPath); + return $this->fileView->copy($sourcePath, $destinationPath); + } catch (StorageNotAvailableException $e) { + throw new ServiceUnavailable($e->getMessage()); + } catch (ForbiddenException $ex) { + throw new Forbidden($ex->getMessage(), $ex->getRetry()); + } catch (LockedException $e) { + throw new FileLocked($e->getMessage(), $e->getCode(), $e); + } } return false; |