summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/connector/sabre/principal.php83
-rw-r--r--tests/lib/connector/sabre/principal.php249
2 files changed, 306 insertions, 26 deletions
diff --git a/lib/private/connector/sabre/principal.php b/lib/private/connector/sabre/principal.php
index 2bee83b1fcc..4bb28c65ddd 100644
--- a/lib/private/connector/sabre/principal.php
+++ b/lib/private/connector/sabre/principal.php
@@ -2,12 +2,34 @@
/**
* Copyright (c) 2011 Jakob Sack mail@jakobsack.de
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * Copyright (c) 2014 Lukas Reschke lukas@owncloud.com
+ *
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
-class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\BackendInterface {
+namespace OC\Connector\Sabre;
+
+use OCP\IUserManager;
+use OCP\IConfig;
+
+class Principal implements \Sabre\DAVACL\PrincipalBackend\BackendInterface {
+ /** @var IConfig */
+ private $config;
+ /** @var IUserManager */
+ private $userManager;
+
+ /**
+ * @param IConfig $config
+ * @param IUserManager $userManager
+ */
+ public function __construct(IConfig $config,
+ IUserManager $userManager) {
+ $this->config = $config;
+ $this->userManager = $userManager;
+ }
+
/**
* Returns a list of principals based on a prefix.
*
@@ -19,22 +41,21 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
* {DAV:}displayname
*
* @param string $prefixPath
- * @return array
+ * @return string[]
*/
- public function getPrincipalsByPrefix( $prefixPath ) {
- $principals = array();
+ public function getPrincipalsByPrefix($prefixPath) {
+ $principals = [];
- if ($prefixPath == 'principals') {
- foreach(OC_User::getUsers() as $user) {
+ if ($prefixPath === 'principals') {
+ foreach($this->userManager->search('') as $user) {
- $user_uri = 'principals/'.$user;
- $principal = array(
- 'uri' => $user_uri,
- '{DAV:}displayname' => $user,
- );
+ $principal = [
+ 'uri' => 'principals/' . $user->getUID(),
+ '{DAV:}displayname' => $user->getUID(),
+ ];
- $email= \OCP\Config::getUserValue($user, 'settings', 'email');
- if($email) {
+ $email = $this->config->getUserValue($user->getUID(), 'settings', 'email');
+ if(!empty($email)) {
$principal['{http://sabredav.org/ns}email-address'] = $email;
}
@@ -55,15 +76,15 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
*/
public function getPrincipalByPath($path) {
list($prefix, $name) = explode('/', $path);
+ $user = $this->userManager->get($name);
- if ($prefix == 'principals' && OC_User::userExists($name)) {
+ if ($prefix === 'principals' && !is_null($user)) {
+ $principal = [
+ 'uri' => 'principals/' . $user->getUID(),
+ '{DAV:}displayname' => $user->getUID(),
+ ];
- $principal = array(
- 'uri' => 'principals/'.$name,
- '{DAV:}displayname' => $name,
- );
-
- $email= \OCP\Config::getUserValue($name, 'settings', 'email');
+ $email = $this->config->getUserValue($user->getUID(), 'settings', 'email');
if($email) {
$principal['{http://sabredav.org/ns}email-address'] = $email;
}
@@ -79,6 +100,7 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
*
* @param string $principal
* @return string[]
+ * @throws \Sabre\DAV\Exception
*/
public function getGroupMemberSet($principal) {
// TODO: for now the group principal has only one member, the user itself
@@ -87,9 +109,7 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
throw new \Sabre\DAV\Exception('Principal not found');
}
- return array(
- $principal['uri']
- );
+ return [$principal['uri']];
}
/**
@@ -97,12 +117,13 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
*
* @param string $principal
* @return array
+ * @throws \Sabre\DAV\Exception
*/
public function getGroupMembership($principal) {
list($prefix, $name) = \Sabre\DAV\URLUtil::splitPath($principal);
$group_membership = array();
- if ($prefix == 'principals') {
+ if ($prefix === 'principals') {
$principal = $this->getPrincipalByPath($principal);
if (!$principal) {
throw new \Sabre\DAV\Exception('Principal not found');
@@ -128,17 +149,27 @@ class OC_Connector_Sabre_Principal implements \Sabre\DAVACL\PrincipalBackend\Bac
*
* @param string $principal
* @param array $members
- * @return void
+ * @throws \Sabre\DAV\Exception
*/
public function setGroupMemberSet($principal, array $members) {
throw new \Sabre\DAV\Exception('Setting members of the group is not supported yet');
}
+ /**
+ * @param string $path
+ * @param array $mutations
+ * @return int
+ */
function updatePrincipal($path, $mutations) {
return 0;
}
+ /**
+ * @param string $prefixPath
+ * @param array $searchProperties
+ * @return array
+ */
function searchPrincipals($prefixPath, array $searchProperties) {
- return array();
+ return [];
}
}
diff --git a/tests/lib/connector/sabre/principal.php b/tests/lib/connector/sabre/principal.php
new file mode 100644
index 00000000000..5d13aa4421e
--- /dev/null
+++ b/tests/lib/connector/sabre/principal.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Connector\Sabre;
+
+use OCP\IUserManager;
+use OCP\IConfig;
+
+class Principal extends \Test\TestCase {
+ /** @var IUserManager */
+ private $userManager;
+ /** @var IConfig */
+ private $config;
+ /** @var \OC\Connector\Sabre\Principal */
+ private $connector;
+
+ public function setUp() {
+ $this->userManager = $this->getMockBuilder('\OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->config = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->connector = new \OC\Connector\Sabre\Principal($this->config, $this->userManager);
+ parent::setUp();
+ }
+
+ public function testGetPrincipalsByPrefixWithoutPrefix() {
+ $response = $this->connector->getPrincipalsByPrefix('');
+ $this->assertSame([], $response);
+ }
+
+ public function testGetPrincipalsByPrefixWithUsers() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $barUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $barUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('bar'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('search')
+ ->with('')
+ ->will($this->returnValue([$fooUser, $barUser]));
+ $this->config
+ ->expects($this->at(0))
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue(''));
+ $this->config
+ ->expects($this->at(1))
+ ->method('getUserValue')
+ ->with('bar', 'settings', 'email')
+ ->will($this->returnValue('bar@owncloud.org'));
+
+ $expectedResponse = [
+ 0 => [
+ 'uri' => 'principals/foo',
+ '{DAV:}displayname' => 'foo'
+ ],
+ 1 => [
+ 'uri' => 'principals/bar',
+ '{DAV:}displayname' => 'bar',
+ '{http://sabredav.org/ns}email-address' => 'bar@owncloud.org'
+ ]
+ ];
+ $response = $this->connector->getPrincipalsByPrefix('principals');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testGetPrincipalsByPrefixEmpty() {
+ $this->userManager
+ ->expects($this->once())
+ ->method('search')
+ ->with('')
+ ->will($this->returnValue([]));
+
+ $response = $this->connector->getPrincipalsByPrefix('principals');
+ $this->assertSame([], $response);
+ }
+
+ public function testGetPrincipalsByPathWithoutMail() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue($fooUser));
+ $this->config
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue(''));
+
+ $expectedResponse = [
+ 'uri' => 'principals/foo',
+ '{DAV:}displayname' => 'foo'
+ ];
+ $response = $this->connector->getPrincipalByPath('principals/foo');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testGetPrincipalsByPathWithMail() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue($fooUser));
+ $this->config
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue('foo@owncloud.org'));
+
+ $expectedResponse = [
+ 'uri' => 'principals/foo',
+ '{DAV:}displayname' => 'foo',
+ '{http://sabredav.org/ns}email-address' => 'foo@owncloud.org'
+ ];
+ $response = $this->connector->getPrincipalByPath('principals/foo');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testGetPrincipalsByPathEmpty() {
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue(null));
+
+ $response = $this->connector->getPrincipalByPath('principals/foo');
+ $this->assertSame(null, $response);
+ }
+
+ public function testGetGroupMemberSet() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue($fooUser));
+ $this->config
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue('foo@owncloud.org'));
+
+ $response = $this->connector->getGroupMemberSet('principals/foo');
+ $this->assertSame(['principals/foo'], $response);
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception
+ * @expectedExceptionMessage Principal not found
+ */
+ public function testGetGroupMemberSetEmpty() {
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue(null));
+
+ $this->connector->getGroupMemberSet('principals/foo');
+ }
+
+ public function testGetGroupMembership() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(3))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue($fooUser));
+ $this->config
+ ->expects($this->once())
+ ->method('getUserValue')
+ ->with('foo', 'settings', 'email')
+ ->will($this->returnValue('foo@owncloud.org'));
+
+ $expectedResponse = [
+ 'principals/foo/calendar-proxy-read',
+ 'principals/foo/calendar-proxy-write'
+ ];
+ $response = $this->connector->getGroupMembership('principals/foo');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception
+ * @expectedExceptionMessage Principal not found
+ */
+ public function testGetGroupMembershipEmpty() {
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('foo')
+ ->will($this->returnValue(null));
+
+ $this->connector->getGroupMembership('principals/foo');
+ }
+
+ /**
+ * @expectedException \Sabre\DAV\Exception
+ * @expectedExceptionMessage Setting members of the group is not supported yet
+ */
+ public function testSetGroupMembership() {
+ $this->connector->setGroupMemberSet('principals/foo', ['foo']);
+ }
+
+ public function testUpdatePrincipal() {
+ $this->assertSame(0, $this->connector->updatePrincipal('foo', []));
+ }
+
+ public function testSearchPrincipals() {
+ $this->assertSame([], $this->connector->searchPrincipals('principals', []));
+ }
+}