Add calendar sharing
This commit is contained in:
parent
dfeb6ea491
commit
9106595608
|
@ -36,7 +36,7 @@ $app = new Application();
|
||||||
|
|
||||||
/** @var Symfony\Component\Console\Application $application */
|
/** @var Symfony\Component\Console\Application $application */
|
||||||
$application->add(new CreateAddressBook($userManager, $groupManager, $dbConnection, $logger));
|
$application->add(new CreateAddressBook($userManager, $groupManager, $dbConnection, $logger));
|
||||||
$application->add(new CreateCalendar($userManager, $dbConnection));
|
$application->add(new CreateCalendar($userManager, $groupManager, $dbConnection));
|
||||||
$application->add(new SyncSystemAddressBook($app->getSyncService()));
|
$application->add(new SyncSystemAddressBook($app->getSyncService()));
|
||||||
|
|
||||||
// the occ tool is *for now* only available in debug mode for developers to test
|
// the occ tool is *for now* only available in debug mode for developers to test
|
||||||
|
|
|
@ -21,7 +21,9 @@
|
||||||
namespace OCA\DAV\Command;
|
namespace OCA\DAV\Command;
|
||||||
|
|
||||||
use OCA\DAV\CalDAV\CalDavBackend;
|
use OCA\DAV\CalDAV\CalDavBackend;
|
||||||
|
use OCA\DAV\Connector\Sabre\Principal;
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
|
use OCP\IGroupManager;
|
||||||
use OCP\IUserManager;
|
use OCP\IUserManager;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
@ -33,6 +35,9 @@ class CreateCalendar extends Command {
|
||||||
/** @var IUserManager */
|
/** @var IUserManager */
|
||||||
protected $userManager;
|
protected $userManager;
|
||||||
|
|
||||||
|
/** @var IGroupManager $groupManager */
|
||||||
|
private $groupManager;
|
||||||
|
|
||||||
/** @var \OCP\IDBConnection */
|
/** @var \OCP\IDBConnection */
|
||||||
protected $dbConnection;
|
protected $dbConnection;
|
||||||
|
|
||||||
|
@ -40,9 +45,10 @@ class CreateCalendar extends Command {
|
||||||
* @param IUserManager $userManager
|
* @param IUserManager $userManager
|
||||||
* @param IDBConnection $dbConnection
|
* @param IDBConnection $dbConnection
|
||||||
*/
|
*/
|
||||||
function __construct(IUserManager $userManager, IDBConnection $dbConnection) {
|
function __construct(IUserManager $userManager, IGroupManager $groupManager, IDBConnection $dbConnection) {
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->userManager = $userManager;
|
$this->userManager = $userManager;
|
||||||
|
$this->groupManager = $groupManager;
|
||||||
$this->dbConnection = $dbConnection;
|
$this->dbConnection = $dbConnection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,8 +69,13 @@ class CreateCalendar extends Command {
|
||||||
if (!$this->userManager->userExists($user)) {
|
if (!$this->userManager->userExists($user)) {
|
||||||
throw new \InvalidArgumentException("User <$user> in unknown.");
|
throw new \InvalidArgumentException("User <$user> in unknown.");
|
||||||
}
|
}
|
||||||
|
$principalBackend = new Principal(
|
||||||
|
$this->userManager,
|
||||||
|
$this->groupManager
|
||||||
|
);
|
||||||
|
|
||||||
$name = $input->getArgument('name');
|
$name = $input->getArgument('name');
|
||||||
$caldav = new CalDavBackend($this->dbConnection);
|
$caldav = new CalDavBackend($this->dbConnection, $principalBackend);
|
||||||
$caldav->createCalendar("principals/users/$user", $name, []);
|
$caldav->createCalendar("principals/users/$user", $name, []);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
namespace OCA\DAV\CalDAV;
|
namespace OCA\DAV\CalDAV;
|
||||||
|
|
||||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||||
|
use OCA\DAV\Connector\Sabre\Principal;
|
||||||
|
use OCA\DAV\DAV\Sharing\Backend;
|
||||||
use Sabre\CalDAV\Backend\AbstractBackend;
|
use Sabre\CalDAV\Backend\AbstractBackend;
|
||||||
use Sabre\CalDAV\Backend\SchedulingSupport;
|
use Sabre\CalDAV\Backend\SchedulingSupport;
|
||||||
use Sabre\CalDAV\Backend\SubscriptionSupport;
|
use Sabre\CalDAV\Backend\SubscriptionSupport;
|
||||||
|
@ -32,6 +34,7 @@ use Sabre\CalDAV\Xml\Property\ScheduleCalendarTransp;
|
||||||
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
|
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
|
||||||
use Sabre\DAV;
|
use Sabre\DAV;
|
||||||
use Sabre\DAV\Exception\Forbidden;
|
use Sabre\DAV\Exception\Forbidden;
|
||||||
|
use Sabre\HTTP\URLUtil;
|
||||||
use Sabre\VObject\DateTimeParser;
|
use Sabre\VObject\DateTimeParser;
|
||||||
use Sabre\VObject\Reader;
|
use Sabre\VObject\Reader;
|
||||||
use Sabre\VObject\RecurrenceIterator;
|
use Sabre\VObject\RecurrenceIterator;
|
||||||
|
@ -86,8 +89,24 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
||||||
'{http://calendarserver.org/ns/}subscribed-strip-attachments' => 'stripattachments',
|
'{http://calendarserver.org/ns/}subscribed-strip-attachments' => 'stripattachments',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function __construct(\OCP\IDBConnection $db) {
|
/** @var \OCP\IDBConnection */
|
||||||
|
private $db;
|
||||||
|
|
||||||
|
/** @var Backend */
|
||||||
|
private $sharingBackend;
|
||||||
|
|
||||||
|
/** @var Principal */
|
||||||
|
private $principalBackend;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CalDavBackend constructor.
|
||||||
|
*
|
||||||
|
* @param \OCP\IDBConnection $db
|
||||||
|
*/
|
||||||
|
public function __construct(\OCP\IDBConnection $db, Principal $principalBackend) {
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
|
$this->principalBackend = $principalBackend;
|
||||||
|
$this->sharingBackend = new Backend($this->db, 'calendar');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -156,6 +175,59 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
||||||
$calendars[] = $calendar;
|
$calendars[] = $calendar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$stmt->closeCursor();
|
||||||
|
|
||||||
|
// query for shared calendars
|
||||||
|
$principals = $this->principalBackend->getGroupMembership($principalUri);
|
||||||
|
$principals[]= $principalUri;
|
||||||
|
|
||||||
|
$fields = array_values($this->propertyMap);
|
||||||
|
$fields[] = 'a.id';
|
||||||
|
$fields[] = 'a.uri';
|
||||||
|
$fields[] = 'a.synctoken';
|
||||||
|
$fields[] = 'a.components';
|
||||||
|
$fields[] = 'a.principaluri';
|
||||||
|
$fields[] = 'a.transparent';
|
||||||
|
$fields[] = 's.access';
|
||||||
|
$query = $this->db->getQueryBuilder();
|
||||||
|
$result = $query->select($fields)
|
||||||
|
->from('dav_shares', 's')
|
||||||
|
->join('s', 'calendars', 'a', $query->expr()->eq('s.resourceid', 'a.id'))
|
||||||
|
->where($query->expr()->in('s.principaluri', $query->createParameter('principaluri')))
|
||||||
|
->andWhere($query->expr()->eq('s.type', $query->createParameter('type')))
|
||||||
|
->setParameter('type', 'calendar')
|
||||||
|
->setParameter('principaluri', $principals, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
while($row = $result->fetch()) {
|
||||||
|
list(, $name) = URLUtil::splitPath($row['principaluri']);
|
||||||
|
$uri = $row['uri'] . '_shared_by_' . $name;
|
||||||
|
$row['displayname'] = $row['displayname'] . "($name)";
|
||||||
|
$components = [];
|
||||||
|
if ($row['components']) {
|
||||||
|
$components = explode(',',$row['components']);
|
||||||
|
}
|
||||||
|
$calendar = [
|
||||||
|
'id' => $row['id'],
|
||||||
|
'uri' => $uri,
|
||||||
|
'principaluri' => $principalUri,
|
||||||
|
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
|
||||||
|
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
|
||||||
|
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
|
||||||
|
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
|
||||||
|
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'],
|
||||||
|
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => $row['access'] === Backend::ACCESS_READ,
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach($this->propertyMap as $xmlName=>$dbName) {
|
||||||
|
$calendar[$xmlName] = $row[$dbName];
|
||||||
|
}
|
||||||
|
|
||||||
|
$calendars[]= $calendar;
|
||||||
|
}
|
||||||
|
$result->closeCursor();
|
||||||
|
|
||||||
|
|
||||||
return $calendars;
|
return $calendars;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1173,4 +1245,17 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
||||||
|
|
||||||
return $cardData;
|
return $cardData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function updateShares($shareable, $add, $remove) {
|
||||||
|
$this->sharingBackend->updateShares($shareable, $add, $remove);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getShares($resourceId) {
|
||||||
|
return $this->sharingBackend->getShares($resourceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function applyShareAcl($addressBookId, $acl) {
|
||||||
|
return $this->sharingBackend->applyShareAcl($addressBookId, $acl);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\DAV\CalDAV;
|
||||||
|
|
||||||
|
use OCA\DAV\DAV\Sharing\IShareable;
|
||||||
|
|
||||||
|
class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the list of shares.
|
||||||
|
*
|
||||||
|
* The first array is a list of people that are to be added to the
|
||||||
|
* resource.
|
||||||
|
*
|
||||||
|
* Every element in the add array has the following properties:
|
||||||
|
* * href - A url. Usually a mailto: address
|
||||||
|
* * commonName - Usually a first and last name, or false
|
||||||
|
* * summary - A description of the share, can also be false
|
||||||
|
* * readOnly - A boolean value
|
||||||
|
*
|
||||||
|
* Every element in the remove array is just the address string.
|
||||||
|
*
|
||||||
|
* @param array $add
|
||||||
|
* @param array $remove
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function updateShares(array $add, array $remove) {
|
||||||
|
/** @var CalDavBackend $calDavBackend */
|
||||||
|
$calDavBackend = $this->caldavBackend;
|
||||||
|
$calDavBackend->updateShares($this, $add, $remove);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of people whom this resource is shared with.
|
||||||
|
*
|
||||||
|
* Every element in this array should have the following properties:
|
||||||
|
* * href - Often a mailto: address
|
||||||
|
* * commonName - Optional, for example a first + last name
|
||||||
|
* * status - See the Sabre\CalDAV\SharingPlugin::STATUS_ constants.
|
||||||
|
* * readOnly - boolean
|
||||||
|
* * summary - Optional, a description for the share
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function getShares() {
|
||||||
|
/** @var CalDavBackend $caldavBackend */
|
||||||
|
$caldavBackend = $this->caldavBackend;
|
||||||
|
return $caldavBackend->getShares($this->getResourceId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getResourceId() {
|
||||||
|
return $this->calendarInfo['id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function getACL() {
|
||||||
|
$acl = parent::getACL();
|
||||||
|
|
||||||
|
// add the current user
|
||||||
|
if (isset($this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal'])) {
|
||||||
|
$owner = $this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal'];
|
||||||
|
$acl[] = [
|
||||||
|
'privilege' => '{DAV:}read',
|
||||||
|
'principal' => $owner,
|
||||||
|
'protected' => true,
|
||||||
|
];
|
||||||
|
if ($this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only']) {
|
||||||
|
$acl[] = [
|
||||||
|
'privilege' => '{DAV:}write',
|
||||||
|
'principal' => $owner,
|
||||||
|
'protected' => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var CalDavBackend $caldavBackend */
|
||||||
|
$caldavBackend = $this->caldavBackend;
|
||||||
|
return $caldavBackend->applyShareAcl($this->getResourceId(), $acl);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getChildACL() {
|
||||||
|
$acl = parent::getChildACL();
|
||||||
|
|
||||||
|
/** @var CalDavBackend $caldavBackend */
|
||||||
|
$caldavBackend = $this->caldavBackend;
|
||||||
|
return $caldavBackend->applyShareAcl($this->getResourceId(), $acl);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOwner() {
|
||||||
|
if (isset($this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal'])) {
|
||||||
|
return $this->calendarInfo['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal'];
|
||||||
|
}
|
||||||
|
return parent::getOwner();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\DAV\CalDAV;
|
||||||
|
|
||||||
|
use Sabre\CalDAV\Backend\NotificationSupport;
|
||||||
|
use Sabre\CalDAV\Backend\SchedulingSupport;
|
||||||
|
use Sabre\CalDAV\Backend\SubscriptionSupport;
|
||||||
|
use Sabre\CalDAV\Schedule\Inbox;
|
||||||
|
use Sabre\CalDAV\Schedule\Outbox;
|
||||||
|
use Sabre\CalDAV\Subscriptions\Subscription;
|
||||||
|
use Sabre\DAV\Exception\NotFound;
|
||||||
|
|
||||||
|
class CalendarHome extends \Sabre\CalDAV\CalendarHome {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritdoc
|
||||||
|
*/
|
||||||
|
function getChildren() {
|
||||||
|
$calendars = $this->caldavBackend->getCalendarsForUser($this->principalInfo['uri']);
|
||||||
|
$objs = [];
|
||||||
|
foreach ($calendars as $calendar) {
|
||||||
|
$objs[] = new Calendar($this->caldavBackend, $calendar);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->caldavBackend instanceof SchedulingSupport) {
|
||||||
|
$objs[] = new Inbox($this->caldavBackend, $this->principalInfo['uri']);
|
||||||
|
$objs[] = new Outbox($this->principalInfo['uri']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// We're adding a notifications node, if it's supported by the backend.
|
||||||
|
if ($this->caldavBackend instanceof NotificationSupport) {
|
||||||
|
$objs[] = new \Sabre\CalDAV\Notifications\Collection($this->caldavBackend, $this->principalInfo['uri']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the backend supports subscriptions, we'll add those as well,
|
||||||
|
if ($this->caldavBackend instanceof SubscriptionSupport) {
|
||||||
|
foreach ($this->caldavBackend->getSubscriptionsForUser($this->principalInfo['uri']) as $subscription) {
|
||||||
|
$objs[] = new Subscription($this->caldavBackend, $subscription);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $objs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritdoc
|
||||||
|
*/
|
||||||
|
function getChild($name) {
|
||||||
|
// Special nodes
|
||||||
|
if ($name === 'inbox' && $this->caldavBackend instanceof SchedulingSupport) {
|
||||||
|
return new Inbox($this->caldavBackend, $this->principalInfo['uri']);
|
||||||
|
}
|
||||||
|
if ($name === 'outbox' && $this->caldavBackend instanceof SchedulingSupport) {
|
||||||
|
return new Outbox($this->principalInfo['uri']);
|
||||||
|
}
|
||||||
|
if ($name === 'notifications' && $this->caldavBackend instanceof NotificationSupport) {
|
||||||
|
return new \Sabre\CalDAv\Notifications\Collection($this->caldavBackend, $this->principalInfo['uri']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calendars
|
||||||
|
foreach ($this->caldavBackend->getCalendarsForUser($this->principalInfo['uri']) as $calendar) {
|
||||||
|
if ($calendar['uri'] === $name) {
|
||||||
|
return new Calendar($this->caldavBackend, $calendar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->caldavBackend instanceof SubscriptionSupport) {
|
||||||
|
foreach ($this->caldavBackend->getSubscriptionsForUser($this->principalInfo['uri']) as $subscription) {
|
||||||
|
if ($subscription['uri'] === $name) {
|
||||||
|
return new Subscription($this->caldavBackend, $subscription);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new NotFound('Node with name \'' . $name . '\' could not be found');
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\DAV\CalDAV;
|
||||||
|
|
||||||
|
class CalendarRoot extends \Sabre\CalDAV\CalendarRoot {
|
||||||
|
|
||||||
|
function getChildForPrincipal(array $principal) {
|
||||||
|
return new CalendarHome($this->caldavBackend, $principal);
|
||||||
|
}
|
||||||
|
}
|
|
@ -920,22 +920,6 @@ class CardDavBackend implements BackendInterface, SyncSupport {
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function applyShareAcl($addressBookId, $acl) {
|
public function applyShareAcl($addressBookId, $acl) {
|
||||||
|
return $this->sharingBackend->applyShareAcl($addressBookId, $acl);
|
||||||
$shares = $this->getShares($addressBookId);
|
|
||||||
foreach ($shares as $share) {
|
|
||||||
$acl[] = [
|
|
||||||
'privilege' => '{DAV:}read',
|
|
||||||
'principal' => $share['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}principal'],
|
|
||||||
'protected' => true,
|
|
||||||
];
|
|
||||||
if (!$share['readOnly']) {
|
|
||||||
$acl[] = [
|
|
||||||
'privilege' => '{DAV:}write',
|
|
||||||
'principal' => $share['{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}principal'],
|
|
||||||
'protected' => true,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $acl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,12 +22,12 @@
|
||||||
namespace OCA\DAV;
|
namespace OCA\DAV;
|
||||||
|
|
||||||
use OCA\DAV\CalDAV\CalDavBackend;
|
use OCA\DAV\CalDAV\CalDavBackend;
|
||||||
|
use OCA\DAV\CalDAV\CalendarRoot;
|
||||||
use OCA\DAV\CardDAV\AddressBookRoot;
|
use OCA\DAV\CardDAV\AddressBookRoot;
|
||||||
use OCA\DAV\CardDAV\CardDavBackend;
|
use OCA\DAV\CardDAV\CardDavBackend;
|
||||||
use OCA\DAV\Connector\Sabre\Principal;
|
use OCA\DAV\Connector\Sabre\Principal;
|
||||||
use OCA\DAV\DAV\GroupPrincipalBackend;
|
use OCA\DAV\DAV\GroupPrincipalBackend;
|
||||||
use OCA\DAV\DAV\SystemPrincipalBackend;
|
use OCA\DAV\DAV\SystemPrincipalBackend;
|
||||||
use Sabre\CalDAV\CalendarRoot;
|
|
||||||
use Sabre\CalDAV\Principal\Collection;
|
use Sabre\CalDAV\Principal\Collection;
|
||||||
use Sabre\DAV\SimpleCollection;
|
use Sabre\DAV\SimpleCollection;
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ class RootCollection extends SimpleCollection {
|
||||||
$systemPrincipals->disableListing = $disableListing;
|
$systemPrincipals->disableListing = $disableListing;
|
||||||
$filesCollection = new Files\RootCollection($userPrincipalBackend, 'principals/users');
|
$filesCollection = new Files\RootCollection($userPrincipalBackend, 'principals/users');
|
||||||
$filesCollection->disableListing = $disableListing;
|
$filesCollection->disableListing = $disableListing;
|
||||||
$caldavBackend = new CalDavBackend($db);
|
$caldavBackend = new CalDavBackend($db, $userPrincipalBackend);
|
||||||
$calendarRoot = new CalendarRoot($userPrincipalBackend, $caldavBackend, 'principals/users');
|
$calendarRoot = new CalendarRoot($userPrincipalBackend, $caldavBackend, 'principals/users');
|
||||||
$calendarRoot->disableListing = $disableListing;
|
$calendarRoot->disableListing = $disableListing;
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ fi
|
||||||
cd "$SCRIPTPATH/../../../../../"
|
cd "$SCRIPTPATH/../../../../../"
|
||||||
OC_PASS=user01 php occ user:add --password-from-env user01
|
OC_PASS=user01 php occ user:add --password-from-env user01
|
||||||
php occ dav:create-calendar user01 calendar
|
php occ dav:create-calendar user01 calendar
|
||||||
|
php occ dav:create-calendar user01 shared
|
||||||
OC_PASS=user02 php occ user:add --password-from-env user02
|
OC_PASS=user02 php occ user:add --password-from-env user02
|
||||||
php occ dav:create-calendar user02 calendar
|
php occ dav:create-calendar user02 calendar
|
||||||
cd "$SCRIPTPATH/../../../../../"
|
cd "$SCRIPTPATH/../../../../../"
|
||||||
|
|
|
@ -11,8 +11,8 @@ sleep 30
|
||||||
cd "$SCRIPTPATH/CalDAVTester"
|
cd "$SCRIPTPATH/CalDAVTester"
|
||||||
PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail --basedir "$SCRIPTPATH/../caldavtest/" -o cdt.txt \
|
PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail --basedir "$SCRIPTPATH/../caldavtest/" -o cdt.txt \
|
||||||
"CalDAV/current-user-principal.xml" \
|
"CalDAV/current-user-principal.xml" \
|
||||||
"CalDAV/sync-report.xml"
|
"CalDAV/sync-report.xml" \
|
||||||
|
"CalDAV/sharing-calendars.xml"
|
||||||
|
|
||||||
RESULT=$?
|
RESULT=$?
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<CS:share xmlns:D="DAV:" xmlns:CS="http://owncloud.org/ns">
|
||||||
|
<CS:set>
|
||||||
|
<D:href>principal:principals/users/user02</D:href>
|
||||||
|
<CS:summary>My Shared Calendar</CS:summary>
|
||||||
|
<CS:read-write/>
|
||||||
|
</CS:set>
|
||||||
|
</CS:share>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<D:propfind xmlns:D="DAV:">
|
||||||
|
<D:prop>
|
||||||
|
<D:resourcetype/>
|
||||||
|
<D:owner/>
|
||||||
|
<D:current-user-privilege-set/>
|
||||||
|
</D:prop>
|
||||||
|
</D:propfind>
|
|
@ -0,0 +1,29 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:US/Eastern
|
||||||
|
LAST-MODIFIED:20040110T032845Z
|
||||||
|
BEGIN:STANDARD
|
||||||
|
DTSTART:20001026T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||||
|
TZNAME:EST
|
||||||
|
TZOFFSETFROM:-0400
|
||||||
|
TZOFFSETTO:-0500
|
||||||
|
END:STANDARD
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
DTSTART:20000404T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||||
|
TZNAME:EDT
|
||||||
|
TZOFFSETFROM:-0500
|
||||||
|
TZOFFSETTO:-0400
|
||||||
|
END:DAYLIGHT
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
UID:$uid1:
|
||||||
|
DTSTART;TZID=US/Eastern:$now.year.1:0101T100000
|
||||||
|
DURATION:PT1H
|
||||||
|
DTSTAMP:20051222T205953Z
|
||||||
|
SUMMARY:event 1
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<D:propfind xmlns:D="DAV:" xmlns:CS="http://calendarserver.org/ns/">
|
||||||
|
<D:prop>
|
||||||
|
<CS:invite/>
|
||||||
|
</D:prop>
|
||||||
|
</D:propfind>
|
|
@ -0,0 +1,29 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:US/Eastern
|
||||||
|
LAST-MODIFIED:20040110T032845Z
|
||||||
|
BEGIN:STANDARD
|
||||||
|
DTSTART:20001026T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||||
|
TZNAME:EST
|
||||||
|
TZOFFSETFROM:-0400
|
||||||
|
TZOFFSETTO:-0500
|
||||||
|
END:STANDARD
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
DTSTART:20000404T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||||
|
TZNAME:EDT
|
||||||
|
TZOFFSETFROM:-0500
|
||||||
|
TZOFFSETTO:-0400
|
||||||
|
END:DAYLIGHT
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
UID:$uid1:
|
||||||
|
DTSTART;TZID=US/Eastern:$now.year.1:0101T100000
|
||||||
|
DURATION:PT4H
|
||||||
|
DTSTAMP:20051222T205953Z
|
||||||
|
SUMMARY:event 4
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -0,0 +1,29 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:US/Eastern
|
||||||
|
LAST-MODIFIED:20040110T032845Z
|
||||||
|
BEGIN:STANDARD
|
||||||
|
DTSTART:20001026T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||||
|
TZNAME:EST
|
||||||
|
TZOFFSETFROM:-0400
|
||||||
|
TZOFFSETTO:-0500
|
||||||
|
END:STANDARD
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
DTSTART:20000404T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||||
|
TZNAME:EDT
|
||||||
|
TZOFFSETFROM:-0500
|
||||||
|
TZOFFSETTO:-0400
|
||||||
|
END:DAYLIGHT
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
UID:$uid2:
|
||||||
|
DTSTART;TZID=US/Eastern:$now.year.1:0201T100000
|
||||||
|
DURATION:PT1H
|
||||||
|
DTSTAMP:20051222T205953Z
|
||||||
|
SUMMARY:event 7
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -0,0 +1,29 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:US/Eastern
|
||||||
|
LAST-MODIFIED:20040110T032845Z
|
||||||
|
BEGIN:STANDARD
|
||||||
|
DTSTART:20001026T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||||
|
TZNAME:EST
|
||||||
|
TZOFFSETFROM:-0400
|
||||||
|
TZOFFSETTO:-0500
|
||||||
|
END:STANDARD
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
DTSTART:20000404T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||||
|
TZNAME:EDT
|
||||||
|
TZOFFSETFROM:-0500
|
||||||
|
TZOFFSETTO:-0400
|
||||||
|
END:DAYLIGHT
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
UID:$uid2:
|
||||||
|
DTSTART;TZID=US/Eastern:$now.year.1:0201T100000
|
||||||
|
DURATION:PT7H
|
||||||
|
DTSTAMP:20051222T205953Z
|
||||||
|
SUMMARY:event 7-1
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -0,0 +1,29 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//PYVOBJECT//NONSGML Version 1//EN
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:US/Eastern
|
||||||
|
LAST-MODIFIED:20040110T032845Z
|
||||||
|
BEGIN:STANDARD
|
||||||
|
DTSTART:20001026T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
|
||||||
|
TZNAME:EST
|
||||||
|
TZOFFSETFROM:-0400
|
||||||
|
TZOFFSETTO:-0500
|
||||||
|
END:STANDARD
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
DTSTART:20000404T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
|
||||||
|
TZNAME:EDT
|
||||||
|
TZOFFSETFROM:-0500
|
||||||
|
TZOFFSETTO:-0400
|
||||||
|
END:DAYLIGHT
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
UID:$uid3:
|
||||||
|
DTSTART;TZID=US/Eastern:$now.year.1:0201T100000
|
||||||
|
DURATION:PT7H
|
||||||
|
DTSTAMP:20051222T205953Z
|
||||||
|
SUMMARY:event 9.ics
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -27,6 +27,7 @@
|
||||||
</require-feature>
|
</require-feature>
|
||||||
|
|
||||||
<start>
|
<start>
|
||||||
|
<!--
|
||||||
<request user="$userid1:" pswd="$pswd1:">
|
<request user="$userid1:" pswd="$pswd1:">
|
||||||
<method>DELETEALL</method>
|
<method>DELETEALL</method>
|
||||||
<ruri>$notificationpath1:/</ruri>
|
<ruri>$notificationpath1:/</ruri>
|
||||||
|
@ -50,6 +51,7 @@
|
||||||
<filepath>Resource/Common/PROPPATCH/calendar-transp-opaque.xml</filepath>
|
<filepath>Resource/Common/PROPPATCH/calendar-transp-opaque.xml</filepath>
|
||||||
</data>
|
</data>
|
||||||
</request>
|
</request>
|
||||||
|
-->
|
||||||
</start>
|
</start>
|
||||||
|
|
||||||
<test-suite name='Read-write calendar'>
|
<test-suite name='Read-write calendar'>
|
||||||
|
@ -67,56 +69,11 @@
|
||||||
</verify>
|
</verify>
|
||||||
</request>
|
</request>
|
||||||
</test>
|
</test>
|
||||||
<test name='2'>
|
|
||||||
<description>Check Sharee notification collection</description>
|
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
|
||||||
<method>WAITCOUNT 1</method>
|
|
||||||
<ruri>$notificationpath2:/</ruri>
|
|
||||||
</request>
|
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
|
||||||
<method>GETNEW</method>
|
|
||||||
<ruri>$notificationpath2:/</ruri>
|
|
||||||
<verify>
|
|
||||||
<callback>xmlDataMatch</callback>
|
|
||||||
<arg>
|
|
||||||
<name>filepath</name>
|
|
||||||
<value>Resource/CalDAV/sharing/calendars/read-write/2.xml</value>
|
|
||||||
</arg>
|
|
||||||
<arg>
|
|
||||||
<name>filter</name>
|
|
||||||
<value>{http://calendarserver.org/ns/}dtstamp</value>
|
|
||||||
<value>{http://calendarserver.org/ns/}uid</value>
|
|
||||||
</arg>
|
|
||||||
</verify>
|
|
||||||
<grabelement>
|
|
||||||
<name>{http://calendarserver.org/ns/}invite-notification/{http://calendarserver.org/ns/}uid</name>
|
|
||||||
<variable>$inviteuid:</variable>
|
|
||||||
</grabelement>
|
|
||||||
</request>
|
|
||||||
</test>
|
|
||||||
<test name='3'>
|
|
||||||
<description>Sharee replies ACCEPTED</description>
|
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
|
||||||
<method>POST</method>
|
|
||||||
<ruri>$calendarhome2:/</ruri>
|
|
||||||
<data>
|
|
||||||
<content-type>application/xml; charset=utf-8</content-type>
|
|
||||||
<filepath>Resource/CalDAV/sharing/calendars/read-write/3.xml</filepath>
|
|
||||||
</data>
|
|
||||||
<verify>
|
|
||||||
<callback>statusCode</callback>
|
|
||||||
</verify>
|
|
||||||
<grabelement>
|
|
||||||
<name>{DAV:}href</name>
|
|
||||||
<variable>$sharedcalendar:</variable>
|
|
||||||
</grabelement>
|
|
||||||
</request>
|
|
||||||
</test>
|
|
||||||
<test name='4'>
|
<test name='4'>
|
||||||
<description>Shared calendar exists</description>
|
<description>Shared calendar exists</description>
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
<request user="$userid2:" pswd="$pswd2:">
|
||||||
<method>PROPFIND</method>
|
<method>PROPFIND</method>
|
||||||
<ruri>$sharedcalendar:/</ruri>
|
<ruri>$calendarhome1:/shared/</ruri>
|
||||||
<header>
|
<header>
|
||||||
<name>Depth</name>
|
<name>Depth</name>
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
|
@ -132,12 +89,12 @@
|
||||||
<value>$verify-property-prefix:/{DAV:}owner/{DAV:}href[=$principaluri1:]</value>
|
<value>$verify-property-prefix:/{DAV:}owner/{DAV:}href[=$principaluri1:]</value>
|
||||||
<value>$verify-property-prefix:/{DAV:}resourcetype/{DAV:}collection</value>
|
<value>$verify-property-prefix:/{DAV:}resourcetype/{DAV:}collection</value>
|
||||||
<value>$verify-property-prefix:/{DAV:}resourcetype/{urn:ietf:params:xml:ns:caldav}calendar</value>
|
<value>$verify-property-prefix:/{DAV:}resourcetype/{urn:ietf:params:xml:ns:caldav}calendar</value>
|
||||||
<value>$verify-property-prefix:/{DAV:}resourcetype/{http://calendarserver.org/ns/}shared</value>
|
<!-- value>$verify-property-prefix:/{DAV:}resourcetype/{http://calendarserver.org/ns/}shared</value -->
|
||||||
<value>$verify-property-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}read</value>
|
<value>$verify-property-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}read</value>
|
||||||
<value>$verify-property-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}write</value>
|
<value>$verify-property-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}write</value>
|
||||||
<value>$verify-property-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}bind</value>
|
<value>$verify-property-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}bind</value>
|
||||||
<value>$verify-property-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}unbind</value>
|
<value>$verify-property-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}unbind</value>
|
||||||
<value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp/{urn:ietf:params:xml:ns:caldav}transparent</value>
|
<!-- value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp/{urn:ietf:params:xml:ns:caldav}transparent</value -->
|
||||||
</arg>
|
</arg>
|
||||||
<arg>
|
<arg>
|
||||||
<name>notexists</name>
|
<name>notexists</name>
|
||||||
|
@ -151,7 +108,7 @@
|
||||||
<description>Shared calendar exists Depth:1</description>
|
<description>Shared calendar exists Depth:1</description>
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
<request user="$userid2:" pswd="$pswd2:">
|
||||||
<method>PROPFIND</method>
|
<method>PROPFIND</method>
|
||||||
<ruri>$calendarhome2:/</ruri>
|
<ruri>$calendarhome2:</ruri>
|
||||||
<header>
|
<header>
|
||||||
<name>Depth</name>
|
<name>Depth</name>
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
|
@ -164,19 +121,19 @@
|
||||||
<callback>xmlElementMatch</callback>
|
<callback>xmlElementMatch</callback>
|
||||||
<arg>
|
<arg>
|
||||||
<name>parent</name>
|
<name>parent</name>
|
||||||
<value>$multistatus-response-prefix:[^{DAV:}href=$sharedcalendar:/]</value>
|
<value>$multistatus-response-prefix:[^{DAV:}href=$calendarhome2:/shared_shared_by_user01/]</value>
|
||||||
</arg>
|
</arg>
|
||||||
<arg>
|
<arg>
|
||||||
<name>exists</name>
|
<name>exists</name>
|
||||||
<value>$verify-response-prefix:/{DAV:}owner/{DAV:}href[=$principaluri1:]</value>
|
<value>$verify-response-prefix:/{DAV:}owner/{DAV:}href[=$principaluri1:]</value>
|
||||||
<value>$verify-response-prefix:/{DAV:}resourcetype/{DAV:}collection</value>
|
<value>$verify-response-prefix:/{DAV:}resourcetype/{DAV:}collection</value>
|
||||||
<value>$verify-response-prefix:/{DAV:}resourcetype/{urn:ietf:params:xml:ns:caldav}calendar</value>
|
<value>$verify-response-prefix:/{DAV:}resourcetype/{urn:ietf:params:xml:ns:caldav}calendar</value>
|
||||||
<value>$verify-response-prefix:/{DAV:}resourcetype/{http://calendarserver.org/ns/}shared</value>
|
<!-- value>$verify-response-prefix:/{DAV:}resourcetype/{http://calendarserver.org/ns/}shared</value -->
|
||||||
<value>$verify-response-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}read</value>
|
<value>$verify-response-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}read</value>
|
||||||
<value>$verify-response-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}write</value>
|
<value>$verify-response-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}write</value>
|
||||||
<value>$verify-response-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}bind</value>
|
<value>$verify-response-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}bind</value>
|
||||||
<value>$verify-response-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}unbind</value>
|
<value>$verify-response-prefix:/{DAV:}current-user-privilege-set/{DAV:}privilege/{DAV:}unbind</value>
|
||||||
<value>$verify-response-prefix:/{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp/{urn:ietf:params:xml:ns:caldav}transparent</value>
|
<!-- value>$verify-response-prefix:/{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp/{urn:ietf:params:xml:ns:caldav}transparent</value -->
|
||||||
</arg>
|
</arg>
|
||||||
<arg>
|
<arg>
|
||||||
<name>notexists</name>
|
<name>notexists</name>
|
||||||
|
@ -186,42 +143,6 @@
|
||||||
</verify>
|
</verify>
|
||||||
</request>
|
</request>
|
||||||
</test>
|
</test>
|
||||||
<test name='4b'>
|
|
||||||
<description>Shared calendar has invite property</description>
|
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
|
||||||
<method>PROPFIND</method>
|
|
||||||
<ruri>$sharedcalendar:/</ruri>
|
|
||||||
<header>
|
|
||||||
<name>Depth</name>
|
|
||||||
<value>0</value>
|
|
||||||
</header>
|
|
||||||
<data>
|
|
||||||
<content-type>text/xml; charset=utf-8</content-type>
|
|
||||||
<filepath>Resource/CalDAV/sharing/calendars/read-write/5.xml</filepath>
|
|
||||||
</data>
|
|
||||||
<verify>
|
|
||||||
<callback>propfindItems</callback>
|
|
||||||
<arg>
|
|
||||||
<name>okprops</name>
|
|
||||||
<value>{http://calendarserver.org/ns/}invite</value>
|
|
||||||
</arg>
|
|
||||||
</verify>
|
|
||||||
<verify>
|
|
||||||
<callback>xmlElementMatch</callback>
|
|
||||||
<arg>
|
|
||||||
<name>exists</name>
|
|
||||||
<value>$verify-property-prefix:/{http://calendarserver.org/ns/}invite</value>
|
|
||||||
<value>$verify-property-prefix:/{http://calendarserver.org/ns/}invite/{http://calendarserver.org/ns/}organizer</value>
|
|
||||||
<value>$verify-property-prefix:/{http://calendarserver.org/ns/}invite/{http://calendarserver.org/ns/}organizer/{DAV:}href[=$principaluri1:]</value>
|
|
||||||
<value>$verify-property-prefix:/{http://calendarserver.org/ns/}invite/{http://calendarserver.org/ns/}organizer/{http://calendarserver.org/ns/}common-name[=$username1:]</value>
|
|
||||||
<value>$verify-property-prefix:/{http://calendarserver.org/ns/}invite/{http://calendarserver.org/ns/}user</value>
|
|
||||||
<value>$verify-property-prefix:/{http://calendarserver.org/ns/}invite/{http://calendarserver.org/ns/}user/{DAV:}href[=$cuaddrurn2:]</value>
|
|
||||||
<value>$verify-property-prefix:/{http://calendarserver.org/ns/}invite/{http://calendarserver.org/ns/}user/{http://calendarserver.org/ns/}access/{http://calendarserver.org/ns/}read-write</value>
|
|
||||||
<value>$verify-property-prefix:/{http://calendarserver.org/ns/}invite/{http://calendarserver.org/ns/}user/{http://calendarserver.org/ns/}invite-accepted</value>
|
|
||||||
</arg>
|
|
||||||
</verify>
|
|
||||||
</request>
|
|
||||||
</test>
|
|
||||||
<test name='5'>
|
<test name='5'>
|
||||||
<description>Original calendar unchanged</description>
|
<description>Original calendar unchanged</description>
|
||||||
<request>
|
<request>
|
||||||
|
@ -240,7 +161,7 @@
|
||||||
<arg>
|
<arg>
|
||||||
<name>exists</name>
|
<name>exists</name>
|
||||||
<value>$verify-property-prefix:/{DAV:}owner/{DAV:}href[=$principaluri1:]</value>
|
<value>$verify-property-prefix:/{DAV:}owner/{DAV:}href[=$principaluri1:]</value>
|
||||||
<value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp/{urn:ietf:params:xml:ns:caldav}opaque</value>
|
<!-- value>$verify-property-prefix:/{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp/{urn:ietf:params:xml:ns:caldav}opaque</value -->
|
||||||
</arg>
|
</arg>
|
||||||
</verify>
|
</verify>
|
||||||
</request>
|
</request>
|
||||||
|
@ -249,7 +170,7 @@
|
||||||
<description>Sharee creates event</description>
|
<description>Sharee creates event</description>
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
<request user="$userid2:" pswd="$pswd2:">
|
||||||
<method>PUT</method>
|
<method>PUT</method>
|
||||||
<ruri>$sharedcalendar:/1.ics</ruri>
|
<ruri>$calendarhome1:/shared/1.ics</ruri>
|
||||||
<data>
|
<data>
|
||||||
<content-type>text/calendar; charset=utf-8</content-type>
|
<content-type>text/calendar; charset=utf-8</content-type>
|
||||||
<filepath>Resource/CalDAV/sharing/calendars/read-write/5.ics</filepath>
|
<filepath>Resource/CalDAV/sharing/calendars/read-write/5.ics</filepath>
|
||||||
|
@ -291,7 +212,7 @@
|
||||||
<description>Sharee sees changed event</description>
|
<description>Sharee sees changed event</description>
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
<request user="$userid2:" pswd="$pswd2:">
|
||||||
<method>GET</method>
|
<method>GET</method>
|
||||||
<ruri>$sharedcalendar:/1.ics</ruri>
|
<ruri>$calendarhome1:/shared/1.ics</ruri>
|
||||||
<verify>
|
<verify>
|
||||||
<callback>calendarDataMatch</callback>
|
<callback>calendarDataMatch</callback>
|
||||||
<arg>
|
<arg>
|
||||||
|
@ -319,7 +240,7 @@
|
||||||
<description>Sharee sees new event</description>
|
<description>Sharee sees new event</description>
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
<request user="$userid2:" pswd="$pswd2:">
|
||||||
<method>GET</method>
|
<method>GET</method>
|
||||||
<ruri>$sharedcalendar:/2.ics</ruri>
|
<ruri>$calendarhome1:/shared/2.ics</ruri>
|
||||||
<verify>
|
<verify>
|
||||||
<callback>calendarDataMatch</callback>
|
<callback>calendarDataMatch</callback>
|
||||||
<arg>
|
<arg>
|
||||||
|
@ -333,7 +254,7 @@
|
||||||
<description>Sharee changes event</description>
|
<description>Sharee changes event</description>
|
||||||
<request user="$userid2:" pswd="$pswd2:">
|
<request user="$userid2:" pswd="$pswd2:">
|
||||||
<method>PUT</method>
|
<method>PUT</method>
|
||||||
<ruri>$sharedcalendar:/2.ics</ruri>
|
<ruri>$calendarhome1:/shared/2.ics</ruri>
|
||||||
<data>
|
<data>
|
||||||
<content-type>text/calendar; charset=utf-8</content-type>
|
<content-type>text/calendar; charset=utf-8</content-type>
|
||||||
<filepath>Resource/CalDAV/sharing/calendars/read-write/8.ics</filepath>
|
<filepath>Resource/CalDAV/sharing/calendars/read-write/8.ics</filepath>
|
||||||
|
@ -359,6 +280,7 @@
|
||||||
</test>
|
</test>
|
||||||
</test-suite>
|
</test-suite>
|
||||||
|
|
||||||
|
<!--
|
||||||
<test-suite name='Default calendar cannot be shared calendar'>
|
<test-suite name='Default calendar cannot be shared calendar'>
|
||||||
<test name='1'>
|
<test name='1'>
|
||||||
<description>Set property on Inbox</description>
|
<description>Set property on Inbox</description>
|
||||||
|
@ -560,7 +482,10 @@
|
||||||
</test>
|
</test>
|
||||||
</test-suite>
|
</test-suite>
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
<end>
|
<end>
|
||||||
|
<!--
|
||||||
<request user="$useradmin:" pswd="$pswdadmin:">
|
<request user="$useradmin:" pswd="$pswdadmin:">
|
||||||
<method>DELETEALL</method>
|
<method>DELETEALL</method>
|
||||||
<ruri>$notificationpath1:/</ruri>
|
<ruri>$notificationpath1:/</ruri>
|
||||||
|
@ -568,6 +493,7 @@
|
||||||
<ruri>$notificationpath3:/</ruri>
|
<ruri>$notificationpath3:/</ruri>
|
||||||
<ruri>$notificationpath4:/</ruri>
|
<ruri>$notificationpath4:/</ruri>
|
||||||
</request>
|
</request>
|
||||||
|
-->
|
||||||
</end>
|
</end>
|
||||||
|
|
||||||
</caldavtest>
|
</caldavtest>
|
||||||
|
|
|
@ -23,6 +23,7 @@ namespace Tests\Connector\Sabre;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use DateTimeZone;
|
use DateTimeZone;
|
||||||
use OCA\DAV\CalDAV\CalDavBackend;
|
use OCA\DAV\CalDAV\CalDavBackend;
|
||||||
|
use OCA\DAV\Connector\Sabre\Principal;
|
||||||
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
|
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
|
||||||
use Sabre\DAV\PropPatch;
|
use Sabre\DAV\PropPatch;
|
||||||
use Sabre\DAV\Xml\Property\Href;
|
use Sabre\DAV\Xml\Property\Href;
|
||||||
|
@ -40,14 +41,25 @@ class CalDavBackendTest extends TestCase {
|
||||||
/** @var CalDavBackend */
|
/** @var CalDavBackend */
|
||||||
private $backend;
|
private $backend;
|
||||||
|
|
||||||
const UNIT_TEST_USER = 'caldav-unit-test';
|
/** @var Principal | \PHPUnit_Framework_MockObject_MockObject */
|
||||||
|
private $principal;
|
||||||
|
|
||||||
|
const UNIT_TEST_USER = 'caldav-unit-test';
|
||||||
|
|
||||||
public function setUp() {
|
public function setUp() {
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal')
|
||||||
|
->disableOriginalConstructor()
|
||||||
|
->setMethods(['getPrincipalByPath'])
|
||||||
|
->getMock();
|
||||||
|
$this->principal->method('getPrincipalByPath')
|
||||||
|
->willReturn([
|
||||||
|
'uri' => 'principals/best-friend'
|
||||||
|
]);
|
||||||
|
|
||||||
$db = \OC::$server->getDatabaseConnection();
|
$db = \OC::$server->getDatabaseConnection();
|
||||||
$this->backend = new CalDavBackend($db);
|
$this->backend = new CalDavBackend($db, $this->principal);
|
||||||
|
|
||||||
$this->tearDown();
|
$this->tearDown();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue