summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-05-02 14:19:10 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2016-05-02 14:20:59 +0200
commitb10dcfc3b7e84c97d4dba4f7c63b4dff2fbc310b (patch)
tree05929798758ba15073d40fbfd445f46ea8498987
parentd7eb17bdc023c6e31d24a0636e0f5cad58aa876f (diff)
downloadnextcloud-server-b10dcfc3b7e84c97d4dba4f7c63b4dff2fbc310b.tar.gz
nextcloud-server-b10dcfc3b7e84c97d4dba4f7c63b4dff2fbc310b.zip
Fixing local event delivery for calendar events based on the email address
-rw-r--r--apps/dav/lib/connector/sabre/principal.php8
-rw-r--r--apps/dav/lib/server.php3
-rw-r--r--apps/dav/tests/unit/connector/sabre/principal.php15
-rw-r--r--lib/private/user/manager.php14
-rw-r--r--lib/public/iusermanager.php7
5 files changed, 47 insertions, 0 deletions
diff --git a/apps/dav/lib/connector/sabre/principal.php b/apps/dav/lib/connector/sabre/principal.php
index 18f28a916f1..787bcdf469b 100644
--- a/apps/dav/lib/connector/sabre/principal.php
+++ b/apps/dav/lib/connector/sabre/principal.php
@@ -196,6 +196,14 @@ class Principal implements BackendInterface {
* @return string
*/
function findByUri($uri, $principalPrefix) {
+ if (substr($uri, 0, 7) === 'mailto:') {
+ $email = substr($uri, 7);
+ $users = $this->userManager->getByEmail($email);
+ if (count($users) === 1) {
+ return $this->principalPrefix . '/' . $users[0]->getUID();
+ }
+ }
+
return '';
}
diff --git a/apps/dav/lib/server.php b/apps/dav/lib/server.php
index 73e24c9a292..edaa7ac8552 100644
--- a/apps/dav/lib/server.php
+++ b/apps/dav/lib/server.php
@@ -84,6 +84,9 @@ class Server {
// acl
$acl = new DavAclPlugin();
+ $acl->principalCollectionSet = [
+ 'principals/users', 'principals/groups'
+ ];
$acl->defaultUsernamePath = 'principals/users';
$this->server->addPlugin($acl);
diff --git a/apps/dav/tests/unit/connector/sabre/principal.php b/apps/dav/tests/unit/connector/sabre/principal.php
index 1747885240a..75076e9618b 100644
--- a/apps/dav/tests/unit/connector/sabre/principal.php
+++ b/apps/dav/tests/unit/connector/sabre/principal.php
@@ -255,4 +255,19 @@ class Principal extends TestCase {
public function testSearchPrincipals() {
$this->assertSame([], $this->connector->searchPrincipals('principals/users', []));
}
+
+ public function testFindByUri() {
+ $fooUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $fooUser
+ ->expects($this->exactly(1))
+ ->method('getUID')
+ ->will($this->returnValue('foo'));
+
+ $this->userManager->expects($this->once())->method('getByEmail')->willReturn([
+ $fooUser
+ ]);
+ $ret = $this->connector->findByUri('mailto:foo@bar.net', 'principals/users');
+ $this->assertSame('principals/users/foo', $ret);
+ }
}
diff --git a/lib/private/user/manager.php b/lib/private/user/manager.php
index 4371be134aa..37a3e5ba134 100644
--- a/lib/private/user/manager.php
+++ b/lib/private/user/manager.php
@@ -33,6 +33,7 @@
namespace OC\User;
use OC\Hooks\PublicEmitter;
+use OCP\IUser;
use OCP\IUserBackend;
use OCP\IUserManager;
use OCP\IConfig;
@@ -354,4 +355,17 @@ class Manager extends PublicEmitter implements IUserManager {
} while (count($users) >= $limit);
}
}
+
+ /**
+ * @param string $email
+ * @return IUser[]
+ * @since 9.1.0
+ */
+ public function getByEmail($email) {
+ $userIds = $this->config->getUsersForUserValue('settings', 'email', $email);
+
+ return array_map(function($uid) {
+ return $this->get($uid);
+ }, $userIds);
+ }
}
diff --git a/lib/public/iusermanager.php b/lib/public/iusermanager.php
index 6442938a99b..00c0bbc8721 100644
--- a/lib/public/iusermanager.php
+++ b/lib/public/iusermanager.php
@@ -142,4 +142,11 @@ interface IUserManager {
* @since 9.0.0
*/
public function callForAllUsers (\Closure $callback, $search = '');
+
+ /**
+ * @param string $email
+ * @return IUser[]
+ * @since 9.1.0
+ */
+ public function getByEmail($email);
}