diff --git a/synapse/handlers/groups_local.py b/synapse/handlers/groups_local.py
index 1950c12f1f..b4833f8ef8 100644
--- a/synapse/handlers/groups_local.py
+++ b/synapse/handlers/groups_local.py
@@ -136,12 +136,38 @@ class GroupsLocalHandler(object):
res = yield self.groups_server_handler.create_group(
group_id, user_id, content
)
- defer.returnValue(res)
+ local_attestation = None
+ remote_attestation = None
+ else:
+ local_attestation = self.attestations.create_attestation(group_id, user_id)
+ content["attestation"] = local_attestation
+
+ content["user_profile"] = yield self.profile_handler.get_profile(user_id)
+
+ res = yield self.transport_client.create_group(
+ get_domain_from_id(group_id), group_id, user_id, content,
+ )
+
+ remote_attestation = res["attestation"]
+ yield self.attestations.verify_attestation(
+ remote_attestation,
+ group_id=group_id,
+ user_id=user_id,
+ )
- content["user_profile"] = yield self.profile_handler.get_profile(user_id)
- res = yield self.transport_client.create_group(
- get_domain_from_id(group_id), group_id, user_id, content,
+ is_publicised = content.get("publicise", False)
+ token = yield self.store.register_user_group_membership(
+ group_id, user_id,
+ membership="join",
+ is_admin=True,
+ local_attestation=local_attestation,
+ remote_attestation=remote_attestation,
+ is_publicised=is_publicised,
)
+ self.notifier.on_new_event(
+ "groups_key", token, users=[user_id],
+ )
+
defer.returnValue(res)
@defer.inlineCallbacks
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index f2e4ffcec6..69c1bc189e 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -637,6 +637,7 @@ class SyncHandler(object):
if membership == "join":
if gtype == "membership":
+ # TODO: Add profile
content.pop("membership", None)
joined[group_id] = content["content"]
else:
|