mirror of
https://github.com/owncloudarchive/contacts.git
synced 2024-11-29 11:24:11 +01:00
Implemented sharing api for CardDAV. Next step CalDAV.
This commit is contained in:
parent
01ed69fa50
commit
b935a3e200
@ -5,8 +5,12 @@ OC::$CLASSPATH['OC_Contacts_VCard'] = 'apps/contacts/lib/vcard.php';
|
|||||||
OC::$CLASSPATH['OC_Contacts_Hooks'] = 'apps/contacts/lib/hooks.php';
|
OC::$CLASSPATH['OC_Contacts_Hooks'] = 'apps/contacts/lib/hooks.php';
|
||||||
OC::$CLASSPATH['OC_Share_Backend_Contact'] = 'apps/contacts/lib/share/contact.php';
|
OC::$CLASSPATH['OC_Share_Backend_Contact'] = 'apps/contacts/lib/share/contact.php';
|
||||||
OC::$CLASSPATH['OC_Share_Backend_Addressbook'] = 'apps/contacts/lib/share/addressbook.php';
|
OC::$CLASSPATH['OC_Share_Backend_Addressbook'] = 'apps/contacts/lib/share/addressbook.php';
|
||||||
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'apps/contacts/lib/connector_sabre.php';
|
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'apps/contacts/lib/sabre/backend.php';
|
||||||
OC::$CLASSPATH['Sabre_CardDAV_VCFExportPlugin'] = 'apps/contacts/lib/VCFExportPlugin.php';
|
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_AddressBookRoot'] = 'apps/contacts/lib/sabre/addressbookroot.php';
|
||||||
|
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_UserAddressBooks'] = 'apps/contacts/lib/sabre/useraddressbooks.php';
|
||||||
|
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_AddressBook'] = 'apps/contacts/lib/sabre/addressbook.php';
|
||||||
|
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_Card'] = 'apps/contacts/lib/sabre/card.php';
|
||||||
|
OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_VCFExportPlugin'] = 'apps/contacts/lib/sabre/vcfexportplugin.php';
|
||||||
OC::$CLASSPATH['OC_Search_Provider_Contacts'] = 'apps/contacts/lib/search.php';
|
OC::$CLASSPATH['OC_Search_Provider_Contacts'] = 'apps/contacts/lib/search.php';
|
||||||
OCP\Util::connectHook('OC_User', 'post_createUser', 'OC_Contacts_Hooks', 'createUser');
|
OCP\Util::connectHook('OC_User', 'post_createUser', 'OC_Contacts_Hooks', 'createUser');
|
||||||
OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OC_Contacts_Hooks', 'deleteUser');
|
OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OC_Contacts_Hooks', 'deleteUser');
|
||||||
|
@ -36,15 +36,15 @@ $principalBackend = new OC_Connector_Sabre_Principal();
|
|||||||
$carddavBackend = new OC_Connector_Sabre_CardDAV();
|
$carddavBackend = new OC_Connector_Sabre_CardDAV();
|
||||||
|
|
||||||
// Root nodes
|
// Root nodes
|
||||||
$Sabre_CalDAV_Principal_Collection = new Sabre_CalDAV_Principal_Collection($principalBackend);
|
$principalCollection = new Sabre_CalDAV_Principal_Collection($principalBackend);
|
||||||
$Sabre_CalDAV_Principal_Collection->disableListing = true; // Disable listening
|
$principalCollection->disableListing = true; // Disable listening
|
||||||
|
|
||||||
$Sabre_CardDAV_AddressBookRoot = new Sabre_CardDAV_AddressBookRoot($principalBackend, $carddavBackend);
|
$addressBookRoot = new OC_Connector_Sabre_CardDAV_AddressBookRoot($principalBackend, $carddavBackend);
|
||||||
$Sabre_CardDAV_AddressBookRoot->disableListing = true; // Disable listening
|
$addressBookRoot->disableListing = true; // Disable listening
|
||||||
|
|
||||||
$nodes = array(
|
$nodes = array(
|
||||||
$Sabre_CalDAV_Principal_Collection,
|
$principalCollection,
|
||||||
$Sabre_CardDAV_AddressBookRoot,
|
$addressBookRoot,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Fire up server
|
// Fire up server
|
||||||
@ -55,7 +55,7 @@ $server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, 'ownCloud'));
|
|||||||
$server->addPlugin(new Sabre_CardDAV_Plugin());
|
$server->addPlugin(new Sabre_CardDAV_Plugin());
|
||||||
$server->addPlugin(new Sabre_DAVACL_Plugin());
|
$server->addPlugin(new Sabre_DAVACL_Plugin());
|
||||||
$server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
|
$server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
|
||||||
$server->addPlugin(new Sabre_CardDAV_VCFExportPlugin());
|
//$server->addPlugin(new OC_Connector_Sabre_CardDAV_VCFExportPlugin());
|
||||||
|
|
||||||
// And off we go!
|
// And off we go!
|
||||||
$server->exec();
|
$server->exec();
|
||||||
|
125
lib/sabre/addressbook.php
Normal file
125
lib/sabre/addressbook.php
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ownCloud - Addressbook
|
||||||
|
*
|
||||||
|
* @author Thomas Tanghus
|
||||||
|
* @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3 of the License, or any later version.
|
||||||
|
*
|
||||||
|
* This library 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 along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class overrides __construct to get access to $addressBookInfo and
|
||||||
|
* $carddavBackend, Sabre_CardDAV_AddressBook::getACL() to return read/write
|
||||||
|
* permissions based on user and shared state and it overrides
|
||||||
|
* Sabre_CardDAV_AddressBook::getChild() and Sabre_CardDAV_AddressBook::getChildren()
|
||||||
|
* to instantiate OC_Connector_Sabre_CardDAV_Cards.
|
||||||
|
*/
|
||||||
|
class OC_Connector_Sabre_CardDAV_AddressBook extends Sabre_CardDAV_AddressBook {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CardDAV backend
|
||||||
|
*
|
||||||
|
* @var Sabre_CardDAV_Backend_Abstract
|
||||||
|
*/
|
||||||
|
private $carddavBackend;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param Sabre_CardDAV_Backend_Abstract $carddavBackend
|
||||||
|
* @param array $addressBookInfo
|
||||||
|
*/
|
||||||
|
public function __construct(Sabre_CardDAV_Backend_Abstract $carddavBackend, array $addressBookInfo) {
|
||||||
|
|
||||||
|
$this->carddavBackend = $carddavBackend;
|
||||||
|
$this->addressBookInfo = $addressBookInfo;
|
||||||
|
parent::__construct($carddavBackend, $addressBookInfo);
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns a list of ACE's for this node.
|
||||||
|
*
|
||||||
|
* Each ACE has the following properties:
|
||||||
|
* * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
|
||||||
|
* currently the only supported privileges
|
||||||
|
* * 'principal', a url to the principal who owns the node
|
||||||
|
* * 'protected' (optional), indicating that this ACE is not allowed to
|
||||||
|
* be updated.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getACL() {
|
||||||
|
|
||||||
|
$readprincipal = $this->getOwner();
|
||||||
|
$writeprincipal = $this->getOwner();
|
||||||
|
$uid = OC_Contacts_Addressbook::extractUserID($this->getOwner());
|
||||||
|
|
||||||
|
if($uid != OCP\USER::getUser()) {
|
||||||
|
$sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $this->addressBookInfo['id']);
|
||||||
|
if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_READ)) {
|
||||||
|
$readprincipal = 'principals/' . OCP\USER::getUser();
|
||||||
|
}
|
||||||
|
if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
|
||||||
|
$writeprincipal = 'principals/' . OCP\USER::getUser();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(
|
||||||
|
array(
|
||||||
|
'privilege' => '{DAV:}read',
|
||||||
|
'principal' => $readprincipal,
|
||||||
|
'protected' => true,
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'privilege' => '{DAV:}write',
|
||||||
|
'principal' => $writeprincipal,
|
||||||
|
'protected' => true,
|
||||||
|
),
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a card
|
||||||
|
*
|
||||||
|
* @param string $name
|
||||||
|
* @return OC_Connector_Sabre_DAV_Card
|
||||||
|
*/
|
||||||
|
public function getChild($name) {
|
||||||
|
|
||||||
|
$obj = $this->carddavBackend->getCard($this->addressBookInfo['id'],$name);
|
||||||
|
if (!$obj) throw new Sabre_DAV_Exception_NotFound('Card not found');
|
||||||
|
return new OC_Connector_Sabre_CardDAV_Card($this->carddavBackend,$this->addressBookInfo,$obj);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the full list of cards
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getChildren() {
|
||||||
|
|
||||||
|
$objs = $this->carddavBackend->getCards($this->addressBookInfo['id']);
|
||||||
|
$children = array();
|
||||||
|
foreach($objs as $obj) {
|
||||||
|
$children[] = new OC_Connector_Sabre_CardDAV_Card($this->carddavBackend,$this->addressBookInfo,$obj);
|
||||||
|
}
|
||||||
|
return $children;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
45
lib/sabre/addressbookroot.php
Normal file
45
lib/sabre/addressbookroot.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ownCloud - Addressbook
|
||||||
|
*
|
||||||
|
* @author Thomas Tanghus
|
||||||
|
* @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3 of the License, or any later version.
|
||||||
|
*
|
||||||
|
* This library 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 along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class overrides Sabre_CardDAV_AddressBookRoot::getChildForPrincipal()
|
||||||
|
* to instantiate OC_Connector_CardDAV_UserAddressBooks.
|
||||||
|
*/
|
||||||
|
class OC_Connector_Sabre_CardDAV_AddressBookRoot extends Sabre_CardDAV_AddressBookRoot {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns a node for a principal.
|
||||||
|
*
|
||||||
|
* The passed array contains principal information, and is guaranteed to
|
||||||
|
* at least contain a uri item. Other properties may or may not be
|
||||||
|
* supplied by the authentication backend.
|
||||||
|
*
|
||||||
|
* @param array $principal
|
||||||
|
* @return Sabre_DAV_INode
|
||||||
|
*/
|
||||||
|
public function getChildForPrincipal(array $principal) {
|
||||||
|
|
||||||
|
return new OC_Connector_Sabre_CardDAV_UserAddressBooks($this->carddavBackend, $principal['uri']);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -145,6 +145,7 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
|
|||||||
$data = OC_Contacts_VCard::all($addressbookid);
|
$data = OC_Contacts_VCard::all($addressbookid);
|
||||||
$cards = array();
|
$cards = array();
|
||||||
foreach($data as $i){
|
foreach($data as $i){
|
||||||
|
//OCP\Util::writeLog('contacts', __METHOD__.', uri: ' . $i['uri'], OCP\Util::DEBUG);
|
||||||
$cards[] = array(
|
$cards[] = array(
|
||||||
'id' => $i['id'],
|
'id' => $i['id'],
|
||||||
//'carddata' => $i['carddata'],
|
//'carddata' => $i['carddata'],
|
94
lib/sabre/card.php
Normal file
94
lib/sabre/card.php
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ownCloud - Addressbook
|
||||||
|
*
|
||||||
|
* @author Thomas Tanghus
|
||||||
|
* @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3 of the License, or any later version.
|
||||||
|
*
|
||||||
|
* This library 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 along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class overrides Sabre_CardDAV_Card::getACL()
|
||||||
|
* to return read/write permissions based on user and shared state.
|
||||||
|
*/
|
||||||
|
class OC_Connector_Sabre_CardDAV_Card extends Sabre_CardDAV_Card {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array with information about the containing addressbook
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $addressBookInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param Sabre_CardDAV_Backend_Abstract $carddavBackend
|
||||||
|
* @param array $addressBookInfo
|
||||||
|
* @param array $cardData
|
||||||
|
*/
|
||||||
|
public function __construct(Sabre_CardDAV_Backend_Abstract $carddavBackend, array $addressBookInfo, array $cardData) {
|
||||||
|
|
||||||
|
$this->addressBookInfo = $addressBookInfo;
|
||||||
|
parent::__construct($carddavBackend, $addressBookInfo, $cardData);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of ACE's for this node.
|
||||||
|
*
|
||||||
|
* Each ACE has the following properties:
|
||||||
|
* * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
|
||||||
|
* currently the only supported privileges
|
||||||
|
* * 'principal', a url to the principal who owns the node
|
||||||
|
* * 'protected' (optional), indicating that this ACE is not allowed to
|
||||||
|
* be updated.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getACL() {
|
||||||
|
|
||||||
|
$readprincipal = $this->getOwner();
|
||||||
|
$writeprincipal = $this->getOwner();
|
||||||
|
$uid = OC_Contacts_Addressbook::extractUserID($this->getOwner());
|
||||||
|
|
||||||
|
if($uid != OCP\USER::getUser()) {
|
||||||
|
$sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $this->addressBookInfo['id']);
|
||||||
|
if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_READ)) {
|
||||||
|
$readprincipal = 'principals/' . OCP\USER::getUser();
|
||||||
|
}
|
||||||
|
if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
|
||||||
|
$writeprincipal = 'principals/' . OCP\USER::getUser();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(
|
||||||
|
array(
|
||||||
|
'privilege' => '{DAV:}read',
|
||||||
|
'principal' => $readprincipal,
|
||||||
|
'protected' => true,
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'privilege' => '{DAV:}write',
|
||||||
|
'principal' => $writeprincipal,
|
||||||
|
'protected' => true,
|
||||||
|
),
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
45
lib/sabre/useraddressbooks.php
Normal file
45
lib/sabre/useraddressbooks.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ownCloud - Addressbook
|
||||||
|
*
|
||||||
|
* @author Thomas Tanghus
|
||||||
|
* @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 3 of the License, or any later version.
|
||||||
|
*
|
||||||
|
* This library 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 along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class overrides Sabre_CardDAV_UserAddressBooks::getChildren()
|
||||||
|
* to instantiate OC_Connector_Sabre_CardDAV_AddressBooks.
|
||||||
|
*/
|
||||||
|
class OC_Connector_Sabre_CardDAV_UserAddressBooks extends Sabre_CardDAV_UserAddressBooks {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of addressbooks
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getChildren() {
|
||||||
|
|
||||||
|
$addressbooks = $this->carddavBackend->getAddressbooksForUser($this->principalUri);
|
||||||
|
$objs = array();
|
||||||
|
foreach($addressbooks as $addressbook) {
|
||||||
|
$objs[] = new OC_Connector_Sabre_CardDAV_AddressBook($this->carddavBackend, $addressbook);
|
||||||
|
}
|
||||||
|
return $objs;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -38,7 +38,7 @@
|
|||||||
/**
|
/**
|
||||||
* This class manages our vCards
|
* This class manages our vCards
|
||||||
*/
|
*/
|
||||||
class OC_Contacts_VCard{
|
class OC_Contacts_VCard {
|
||||||
/**
|
/**
|
||||||
* @brief Returns all cards of an address book
|
* @brief Returns all cards of an address book
|
||||||
* @param integer $id
|
* @param integer $id
|
||||||
|
Loading…
Reference in New Issue
Block a user