summaryrefslogtreecommitdiffstats
path: root/apps/dav
diff options
context:
space:
mode:
authorSimon L <szaimen@e.mail.de>2023-04-18 04:11:44 +0200
committerGitHub <noreply@github.com>2023-04-18 04:11:44 +0200
commit855e7a2efb377653d0ce50ff9c0e43ec27612413 (patch)
tree35c17a4cb706b29d03b4a1a866ac0f7d997b5355 /apps/dav
parente10e509452de7f69c64e394a652b46a6ca2cbd95 (diff)
parentd9c81f56ad25d6665e87468cf18dc2646334fb3b (diff)
downloadnextcloud-server-855e7a2efb377653d0ce50ff9c0e43ec27612413.tar.gz
nextcloud-server-855e7a2efb377653d0ce50ff9c0e43ec27612413.zip
Merge pull request #36774 from nextcloud/bugfix/noid/sabre-nodes
fix: always use proper path on node api when calling the view
Diffstat (limited to 'apps/dav')
-rw-r--r--apps/dav/lib/Connector/Sabre/Node.php11
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php20
-rw-r--r--apps/dav/tests/unit/Files/FileSearchBackendTest.php8
3 files changed, 30 insertions, 9 deletions
diff --git a/apps/dav/lib/Connector/Sabre/Node.php b/apps/dav/lib/Connector/Sabre/Node.php
index 2c8d313eefd..c9407b12786 100644
--- a/apps/dav/lib/Connector/Sabre/Node.php
+++ b/apps/dav/lib/Connector/Sabre/Node.php
@@ -91,11 +91,13 @@ abstract class Node implements \Sabre\DAV\INode {
if ($info instanceof Folder || $info instanceof File) {
$this->node = $info;
} else {
+ // The Node API assumes that the view passed doesn't have a fake root
+ $rootView = \OC::$server->get(View::class);
$root = \OC::$server->get(IRootFolder::class);
if ($info->getType() === FileInfo::TYPE_FOLDER) {
- $this->node = new Folder($root, $view, $this->path, $info);
+ $this->node = new Folder($root, $rootView, $this->fileView->getAbsolutePath($this->path), $info);
} else {
- $this->node = new File($root, $view, $this->path, $info);
+ $this->node = new File($root, $rootView, $this->fileView->getAbsolutePath($this->path), $info);
}
}
}
@@ -107,10 +109,11 @@ abstract class Node implements \Sabre\DAV\INode {
}
$this->info = $info;
$root = \OC::$server->get(IRootFolder::class);
+ $rootView = \OC::$server->get(View::class);
if ($this->info->getType() === FileInfo::TYPE_FOLDER) {
- $this->node = new Folder($root, $this->fileView, $this->path, $this->info);
+ $this->node = new Folder($root, $rootView, $this->path, $this->info);
} else {
- $this->node = new File($root, $this->fileView, $this->path, $this->info);
+ $this->node = new File($root, $rootView, $this->path, $this->info);
}
}
diff --git a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
index c6365cf3168..0f41ff97cc6 100644
--- a/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/DirectoryTest.php
@@ -29,9 +29,12 @@
namespace OCA\DAV\Tests\Unit\Connector\Sabre;
use OC\Files\FileInfo;
+use OC\Files\Filesystem;
use OC\Files\Node\Node;
use OC\Files\Storage\Wrapper\Quota;
+use OC\Files\View;
use OCA\DAV\Connector\Sabre\Directory;
+use OCP\Constants;
use OCP\Files\ForbiddenException;
use OCP\Files\Mount\IMountPoint;
use Test\Traits\UserTrait;
@@ -91,6 +94,10 @@ class DirectoryTest extends \Test\TestCase {
->willReturn(Node::TYPE_FOLDER);
$this->info->method('getName')
->willReturn("folder");
+ $this->info->method('getPath')
+ ->willReturn("/admin/files/folder");
+ $this->info->method('getPermissions')
+ ->willReturn(Constants::PERMISSION_READ);
}
private function getDir($path = '/') {
@@ -207,12 +214,21 @@ class DirectoryTest extends \Test\TestCase {
$this->view->expects($this->once())
->method('getDirectoryContent')
- ->with('')
->willReturn([$info1, $info2]);
$this->view->expects($this->any())
->method('getRelativePath')
- ->willReturn('');
+ ->willReturnCallback(function ($path) {
+ return str_replace('/admin/files/', '', $path);
+ });
+
+ $this->view->expects($this->any())
+ ->method('getAbsolutePath')
+ ->willReturnCallback(function ($path) {
+ return Filesystem::normalizePath('/admin/files' . $path);
+ });
+
+ $this->overwriteService(View::class, $this->view);
$dir = new Directory($this->view, $this->info);
$nodes = $dir->getChildren();
diff --git a/apps/dav/tests/unit/Files/FileSearchBackendTest.php b/apps/dav/tests/unit/Files/FileSearchBackendTest.php
index cc4dcb62b75..715130d2fae 100644
--- a/apps/dav/tests/unit/Files/FileSearchBackendTest.php
+++ b/apps/dav/tests/unit/Files/FileSearchBackendTest.php
@@ -86,9 +86,11 @@ class FileSearchBackendTest extends TestCase {
->disableOriginalConstructor()
->getMock();
- $this->view = $this->getMockBuilder(View::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $this->view = $this->createMock(View::class);
+
+ $this->view->expects($this->any())
+ ->method('getRoot')
+ ->willReturn('');
$this->view->expects($this->any())
->method('getRelativePath')