Переглянути джерело

CalDAV and CardDAV plugins need to be registered for the principals collection as well

9f2e6431b8

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
tags/v14.0.0beta1
Roeland Jago Douma 6 роки тому
джерело
коміт
69e650d0e8
Аккаунт користувача з таким Email не знайдено
2 змінених файлів з 29 додано та 15 видалено
  1. 12
    10
      apps/dav/lib/Server.php
  2. 17
    5
      apps/dav/tests/unit/ServerTest.php

+ 12
- 10
apps/dav/lib/Server.php Переглянути файл

private $baseUri; private $baseUri;


/** @var Connector\Sabre\Server */ /** @var Connector\Sabre\Server */
private $server;
public $server;


public function __construct(IRequest $request, $baseUri) { public function __construct(IRequest $request, $baseUri) {
$this->request = $request; $this->request = $request;
$this->server->addPlugin($acl); $this->server->addPlugin($acl);


// calendar plugins // calendar plugins
if ($this->requestIsForSubtree('calendars')) {
if ($this->requestIsForSubtree(['calendars', 'principals'])) {
$this->server->addPlugin(new \OCA\DAV\CalDAV\Plugin()); $this->server->addPlugin(new \OCA\DAV\CalDAV\Plugin());
$this->server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin()); $this->server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());
$this->server->addPlugin(new \OCA\DAV\CalDAV\Schedule\Plugin()); $this->server->addPlugin(new \OCA\DAV\CalDAV\Schedule\Plugin());
} }


// addressbook plugins // 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 \OCA\DAV\CardDAV\Plugin());
$this->server->addPlugin(new VCFExportPlugin()); $this->server->addPlugin(new VCFExportPlugin());
$this->server->addPlugin(new ImageExportPlugin(new PhotoCache(\OC::$server->getAppDataDir('dav-photocache')))); $this->server->addPlugin(new ImageExportPlugin(new PhotoCache(\OC::$server->getAppDataDir('dav-photocache'))));
$this->server->exec(); $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;
} }
} }

+ 17
- 5
apps/dav/tests/unit/ServerTest.php Переглянути файл

*/ */
class ServerTest extends \Test\TestCase { 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 = $this->createMock(IRequest::class);
$r->method('getRequestUri')
->willReturn('/');
$r->expects($this->any())->method('getRequestUri')->willReturn($uri);
$s = new Server($r, '/'); $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']],
];
} }
} }

Завантаження…
Відмінити
Зберегти