diff --git a/.travis.yml b/.travis.yml
index 49a9e07e3f..c599a0c192 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -37,7 +37,9 @@ matrix:
- php: 5.4
env: DB=pgsql;TC=litmus-v1
- php: 5.4
- env: DB=pgsql;TC=carddavtester
+ env: DB=sqlite;TC=carddavtester
+# - php: 5.4
+# env: DB=pgsql;TC=carddavtester
# - php: 5.4
# env: DB=mysql;TC=caldavtester
diff --git a/3rdparty b/3rdparty
index 3215390b01..e5d7aad946 160000
--- a/3rdparty
+++ b/3rdparty
@@ -1 +1 @@
-Subproject commit 3215390b01ab3e76f15825ff126961bbb5a86328
+Subproject commit e5d7aad94652f3fd5c440472d0cf7303ca796439
diff --git a/apps/dav/appinfo/register_command.php b/apps/dav/appinfo/register_command.php
index 7d57b944fb..1f0df05411 100644
--- a/apps/dav/appinfo/register_command.php
+++ b/apps/dav/appinfo/register_command.php
@@ -5,6 +5,8 @@ use OCA\DAV\Command\CreateCalendar;
$dbConnection = \OC::$server->getDatabaseConnection();
$userManager = OC::$server->getUserManager();
+$config = \OC::$server->getConfig();
+
/** @var Symfony\Component\Console\Application $application */
-$application->add(new CreateAddressBook($userManager, $dbConnection));
+$application->add(new CreateAddressBook($userManager, $dbConnection, $config));
$application->add(new CreateCalendar($userManager, $dbConnection));
diff --git a/apps/dav/command/createaddressbook.php b/apps/dav/command/createaddressbook.php
index 286871b39e..371ea44121 100644
--- a/apps/dav/command/createaddressbook.php
+++ b/apps/dav/command/createaddressbook.php
@@ -3,6 +3,8 @@
namespace OCA\DAV\Command;
use OCA\DAV\CardDAV\CardDavBackend;
+use OCA\DAV\Connector\Sabre\Principal;
+use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IUserManager;
use Symfony\Component\Console\Command\Command;
@@ -18,26 +20,30 @@ class CreateAddressBook extends Command {
/** @var \OCP\IDBConnection */
protected $dbConnection;
+ /** @var IConfig */
+ private $config;
+
/**
* @param IUserManager $userManager
* @param IDBConnection $dbConnection
*/
- function __construct(IUserManager $userManager, IDBConnection $dbConnection) {
+ function __construct(IUserManager $userManager, IDBConnection $dbConnection, IConfig $config) {
parent::__construct();
$this->userManager = $userManager;
$this->dbConnection = $dbConnection;
+ $this->config = $config;
}
protected function configure() {
$this
- ->setName('dav:create-addressbook')
- ->setDescription('Create a dav addressbook')
- ->addArgument('user',
- InputArgument::REQUIRED,
- 'User for whom the addressbook will be created')
- ->addArgument('name',
- InputArgument::REQUIRED,
- 'Name of the addressbook');
+ ->setName('dav:create-addressbook')
+ ->setDescription('Create a dav addressbook')
+ ->addArgument('user',
+ InputArgument::REQUIRED,
+ 'User for whom the addressbook will be created')
+ ->addArgument('name',
+ InputArgument::REQUIRED,
+ 'Name of the addressbook');
}
protected function execute(InputInterface $input, OutputInterface $output) {
@@ -45,8 +51,13 @@ class CreateAddressBook extends Command {
if (!$this->userManager->userExists($user)) {
throw new \InvalidArgumentException("User <$user> in unknown.");
}
+ $principalBackend = new Principal(
+ $this->config,
+ $this->userManager
+ );
+
$name = $input->getArgument('name');
- $carddav = new CardDavBackend($this->dbConnection);
+ $carddav = new CardDavBackend($this->dbConnection, $principalBackend);
$carddav->createAddressBook("principals/$user", $name, []);
}
}
diff --git a/apps/dav/lib/server.php b/apps/dav/lib/server.php
index 44afcf23df..587c0091e2 100644
--- a/apps/dav/lib/server.php
+++ b/apps/dav/lib/server.php
@@ -39,6 +39,7 @@ class Server {
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\ExceptionLoggerPlugin('webdav', $logger));
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\LockPlugin());
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\ListenerPlugin($dispatcher));
+ $this->server->addPlugin(new \Sabre\DAV\Sync\Plugin());
// calendar plugins
$this->server->addPlugin(new \Sabre\CalDAV\Plugin());
diff --git a/apps/dav/tests/travis/caldavtest/config/serverinfo.xml b/apps/dav/tests/travis/caldavtest/config/serverinfo.xml
index b85a8639e4..24d63d4a3a 100644
--- a/apps/dav/tests/travis/caldavtest/config/serverinfo.xml
+++ b/apps/dav/tests/travis/caldavtest/config/serverinfo.xml
@@ -569,7 +569,7 @@
$addressbookhome%d:
- $addressbooks_uids:$userguid%d:
+ $addressbooks:$userid%d:
diff --git a/apps/dav/tests/travis/caldavtest/tests/CardDAV/sync-report.xml b/apps/dav/tests/travis/caldavtest/tests/CardDAV/sync-report.xml
new file mode 100644
index 0000000000..0321e61edb
--- /dev/null
+++ b/apps/dav/tests/travis/caldavtest/tests/CardDAV/sync-report.xml
@@ -0,0 +1,1602 @@
+
+
+
+
+
+
+
+
+ carddav
+ sync-report
+
+
+
+
+ PUT
+ $addressbookpath1:/1.vcf
+
+ text/vcard; charset=utf-8
+ Resource/CardDAV/vreports/put/1.vcf
+
+
+
+ PUT
+ $addressbookpath1:/2.vcf
+
+ text/vcard; charset=utf-8
+ Resource/CardDAV/vreports/put/2.vcf
+
+
+
+
+
+
+ Not on addressbooks
+
+ PROPFIND
+ $addressbooks:/
+
+
+ text/xml; charset=utf-8
+ Resource/CardDAV/vreports/sync/1.xml
+
+
+ xmlElementMatch
+
+ notexists
+ $verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection
+
+
+
+ propfindItems
+
+ okprops
+ {DAV:}supported-report-set
+
+
+ badprops
+ {DAV:}sync-token
+
+
+
+
+
+
+ On addressbook
+
+ PROPFIND
+ $addressbookpath1:/
+
+
+ text/xml; charset=utf-8
+ Resource/CardDAV/vreports/sync/1.xml
+
+
+ xmlElementMatch
+
+ exists
+ $verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection
+
+
+
+
+
+ propfindItems
+
+ okprops
+ {DAV:}supported-report-set
+ {DAV:}sync-token
+
+
+
+
+
+
+
+
+ initial query - addressbook depth:1
+
+ REPORT
+ $addressbookpath1:/
+
+
+ text/xml; charset=utf-8
+ Resource/CardDAV/vreports/sync/2.xml
+
+
+ multistatusItems
+
+ okhrefs
+
+
+ 1.vcf
+ 2.vcf
+
+
+
+
+
+
+ add new resource
+
+ PUT
+ $addressbookpath1:/3.vcf
+
+ text/vcard; charset=utf-8
+ Resource/CardDAV/vreports/put/3.vcf
+
+
+ statusCode
+
+
+
+
+ new resource - addressbook depth:1
+
+ REPORT
+ $addressbookpath1:/
+
+
+ text/xml; charset=utf-8
+ Resource/CardDAV/vreports/sync/2.xml
+
+
+ multistatusItems
+
+ okhrefs
+
+
+ 1.vcf
+ 2.vcf
+ 3.vcf
+
+
+
+
+
+
+
+
+
+
+
+ DELETEALL
+ $addressbookhome1:/
+ $addressbookhome2:/
+ $notificationpath1:/
+ $notificationpath2:/
+
+
+
+
diff --git a/apps/dav/tests/travis/carddavtester.sh b/apps/dav/tests/travis/carddavtester.sh
index a128872f42..17f7e8eb4a 100644
--- a/apps/dav/tests/travis/carddavtester.sh
+++ b/apps/dav/tests/travis/carddavtester.sh
@@ -18,11 +18,18 @@ fi
# create test user
cd "$SCRIPTPATH/../../../../"
OC_PASS=user01 php occ user:add --password-from-env user01
+php occ dav:create-addressbook user01 addressbook
OC_PASS=user02 php occ user:add --password-from-env user02
+php occ dav:create-addressbook user02 addressbook
cd "$SCRIPTPATH/../../../../"
# run the tests
cd "$SCRIPTPATH/CalDAVTester"
PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail -s "$SCRIPTPATH/caldavtest/config/serverinfo.xml" -o cdt.txt \
- "$SCRIPTPATH/caldavtest/tests/CardDAV/current-user-principal.xml"
+ "$SCRIPTPATH/caldavtest/tests/CardDAV/current-user-principal.xml" \
+ "$SCRIPTPATH/caldavtest/tests/CardDAV/sync-report.xml"
+RESULT=$?
+tail "$SCRIPTPATH/../../../../data-autotest/owncloud.log"
+
+exit $RESULT