diff --git a/apps/dav/lib/carddav/addressbook.php b/apps/dav/lib/carddav/addressbook.php index 1e6ecf622da..507657e9682 100644 --- a/apps/dav/lib/carddav/addressbook.php +++ b/apps/dav/lib/carddav/addressbook.php @@ -3,6 +3,7 @@ namespace OCA\DAV\CardDAV; use OCA\DAV\CardDAV\Sharing\IShareableAddressBook; +use Sabre\DAV\Exception\NotFound; class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareableAddressBook { @@ -77,4 +78,13 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareableAddres return $acl; } + + function getChild($name) { + $obj = $this->carddavBackend->getCard($this->addressBookInfo['id'], $name); + if (!$obj) { + throw new NotFound('Card not found'); + } + return new Card($this->carddavBackend, $this->addressBookInfo, $obj); + } + } diff --git a/apps/dav/lib/carddav/card.php b/apps/dav/lib/carddav/card.php new file mode 100644 index 00000000000..cea0b1e41c7 --- /dev/null +++ b/apps/dav/lib/carddav/card.php @@ -0,0 +1,39 @@ + + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see + * + */ + +namespace OCA\DAV\CardDAV; + +class Card extends \Sabre\CardDAV\Card { + + function getACL() { + $acl = parent::getACL(); + if ($this->getOwner() === 'principals/system/system') { + $acl[] = [ + 'privilege' => '{DAV:}read', + 'principal' => '{DAV:}authenticated', + 'protected' => true, + ]; + } + + return $acl; + } + +}