From 69e650d0e8d0ea38724d0d4afc16683403dad6e0 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Mon, 23 Apr 2018 13:54:58 +0200 Subject: [PATCH] CalDAV and CardDAV plugins need to be registered for the principals collection as well https://github.com/owncloud/core/pull/30149/commits/9f2e6431b88a9635b291b0e824abf74ba766616d Signed-off-by: Roeland Jago Douma --- apps/dav/lib/Server.php | 22 ++++++++++++---------- apps/dav/tests/unit/ServerTest.php | 22 +++++++++++++++++----- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php index ae8e2927fe2..82978711156 100644 --- a/apps/dav/lib/Server.php +++ b/apps/dav/lib/Server.php @@ -71,7 +71,7 @@ class Server { private $baseUri; /** @var Connector\Sabre\Server */ - private $server; + public $server; public function __construct(IRequest $request, $baseUri) { $this->request = $request; @@ -136,7 +136,7 @@ class Server { $this->server->addPlugin($acl); // calendar plugins - if ($this->requestIsForSubtree('calendars')) { + if ($this->requestIsForSubtree(['calendars', 'principals'])) { $this->server->addPlugin(new \OCA\DAV\CalDAV\Plugin()); $this->server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin()); $this->server->addPlugin(new \OCA\DAV\CalDAV\Schedule\Plugin()); @@ -153,7 +153,8 @@ class Server { } // addressbook plugins - if ($this->requestIsForSubtree('addressbooks')) { + if ($this->requestIsForSubtree(['addressbooks', 'principals'])) { + $this->server->addPlugin(new DAV\Sharing\Plugin($authBackend, \OC::$server->getRequest())); $this->server->addPlugin(new \OCA\DAV\CardDAV\Plugin()); $this->server->addPlugin(new VCFExportPlugin()); $this->server->addPlugin(new ImageExportPlugin(new PhotoCache(\OC::$server->getAppDataDir('dav-photocache')))); @@ -284,12 +285,13 @@ class Server { $this->server->exec(); } - /** - * @param string $subTree - * @return bool - */ - private function requestIsForSubtree($subTree) { - $subTree = trim($subTree, " /"); - return strpos($this->server->getRequestUri(), "$subTree/") === 0; + private function requestIsForSubtree(array $subTrees): bool { + foreach ($subTrees as $subTree) { + $subTree = trim($subTree, ' /'); + if (strpos($this->server->getRequestUri(), $subTree.'/') === 0) { + return true; + } + } + return false; } } diff --git a/apps/dav/tests/unit/ServerTest.php b/apps/dav/tests/unit/ServerTest.php index 58c77c1b0ec..986899a2107 100644 --- a/apps/dav/tests/unit/ServerTest.php +++ b/apps/dav/tests/unit/ServerTest.php @@ -38,12 +38,24 @@ use OCA\DAV\AppInfo\PluginManager; */ class ServerTest extends \Test\TestCase { - public function test() { - /** @var IRequest $r */ + /** + * @dataProvider providesUris + */ + public function test($uri, array $plugins) { + /** @var IRequest | \PHPUnit_Framework_MockObject_MockObject $r */ $r = $this->createMock(IRequest::class); - $r->method('getRequestUri') - ->willReturn('/'); + $r->expects($this->any())->method('getRequestUri')->willReturn($uri); $s = new Server($r, '/'); - $this->assertInstanceOf('OCA\DAV\Server', $s); + $this->assertNotNull($s->server); + foreach ($plugins as $plugin) { + $this->assertNotNull($s->server->getPlugin($plugin)); + } + } + public function providesUris() { + return [ + 'principals' => ['principals/users/admin', ['caldav', 'oc-resource-sharing', 'carddav']], + 'calendars' => ['calendars/admin', ['caldav', 'oc-resource-sharing']], + 'addressbooks' => ['addressbooks/admin', ['carddav', 'oc-resource-sharing']], + ]; } }