summaryrefslogtreecommitdiffstats
path: root/apps/dav/lib/connector/sabre
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-01-11 17:29:01 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2016-01-18 22:14:30 +0100
commit8b8edc1f5dbe27cbeaf9935aa175037fdf6d0c1c (patch)
tree0fca2a5dd6c9f53a7c7f4d4b7c172ea79481ccd3 /apps/dav/lib/connector/sabre
parentd7729a8ff6b16aa41f789ef2ca76da27648300fd (diff)
downloadnextcloud-server-8b8edc1f5dbe27cbeaf9935aa175037fdf6d0c1c.tar.gz
nextcloud-server-8b8edc1f5dbe27cbeaf9935aa175037fdf6d0c1c.zip
Show group shared addressbooks
Diffstat (limited to 'apps/dav/lib/connector/sabre')
-rw-r--r--apps/dav/lib/connector/sabre/principal.php31
1 files changed, 18 insertions, 13 deletions
diff --git a/apps/dav/lib/connector/sabre/principal.php b/apps/dav/lib/connector/sabre/principal.php
index ece799c7019..583deb3a175 100644
--- a/apps/dav/lib/connector/sabre/principal.php
+++ b/apps/dav/lib/connector/sabre/principal.php
@@ -29,9 +29,10 @@
namespace OCA\DAV\Connector\Sabre;
+use OCP\IGroup;
+use OCP\IGroupManager;
use OCP\IUser;
use OCP\IUserManager;
-use OCP\IConfig;
use Sabre\DAV\Exception;
use \Sabre\DAV\PropPatch;
use Sabre\DAVACL\PrincipalBackend\BackendInterface;
@@ -42,11 +43,15 @@ class Principal implements BackendInterface {
/** @var IUserManager */
private $userManager;
+ /** @var IGroupManager */
+ private $groupManager;
+
/**
* @param IUserManager $userManager
*/
- public function __construct(IUserManager $userManager) {
+ public function __construct(IUserManager $userManager, IGroupManager $groupManager) {
$this->userManager = $userManager;
+ $this->groupManager = $groupManager;
}
/**
@@ -127,24 +132,24 @@ class Principal implements BackendInterface {
public function getGroupMembership($principal) {
list($prefix, $name) = URLUtil::splitPath($principal);
- $group_membership = array();
if ($prefix === 'principals/users') {
$principal = $this->getPrincipalByPath($principal);
if (!$principal) {
throw new Exception('Principal not found');
}
- // TODO: for now the user principal has only its own groups
- return array(
- 'principals/users/'.$name.'/calendar-proxy-read',
- 'principals/users/'.$name.'/calendar-proxy-write',
- // The addressbook groups are not supported in Sabre,
- // see http://groups.google.com/group/sabredav-discuss/browse_thread/thread/ef2fa9759d55f8c#msg_5720afc11602e753
- //'principals/'.$name.'/addressbook-proxy-read',
- //'principals/'.$name.'/addressbook-proxy-write',
- );
+ $user = $this->userManager->get($name);
+ $groups = $this->groupManager->getUserGroups($user);
+ $groups = array_map(function($group) {
+ /** @var IGroup $group */
+ return 'principals/groups/' . $group->getGID();
+ }, $groups);
+
+ $groups[]= 'principals/users/'.$name.'/calendar-proxy-read';
+ $groups[]= 'principals/users/'.$name.'/calendar-proxy-write';
+ return $groups;
}
- return $group_membership;
+ return [];
}
/**