diff options
author | David Baker <dave@matrix.org> | 2018-03-28 17:18:02 +0100 |
---|---|---|
committer | Luke Barnard <luke@matrix.org> | 2018-04-06 15:43:27 +0100 |
commit | b370fe61c0aeccac7745ad404dad925ec217ba6d (patch) | |
tree | 97db3befb8b085f181aef7b434752ea02a1f9b55 /synapse/handlers/groups_local.py | |
parent | Merge pull request #3070 from krombel/group_join_put_instead_post (diff) | |
download | synapse-b370fe61c0aeccac7745ad404dad925ec217ba6d.tar.xz |
Implement group join API
Diffstat (limited to 'synapse/handlers/groups_local.py')
-rw-r--r-- | synapse/handlers/groups_local.py | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/synapse/handlers/groups_local.py b/synapse/handlers/groups_local.py index 5f7b0ff305..977993e7d4 100644 --- a/synapse/handlers/groups_local.py +++ b/synapse/handlers/groups_local.py @@ -229,7 +229,45 @@ class GroupsLocalHandler(object): def join_group(self, group_id, user_id, content): """Request to join a group """ - raise NotImplementedError() # TODO + if self.is_mine_id(group_id): + yield self.groups_server_handler.join_group( + group_id, user_id, content + ) + local_attestation = None + remote_attestation = None + else: + local_attestation = self.attestations.create_attestation(group_id, user_id) + content["attestation"] = local_attestation + + res = yield self.transport_client.join_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, + server_name=get_domain_from_id(group_id), + ) + + # TODO: Check that the group is public and we're being added publically + is_publicised = content.get("publicise", False) + + token = yield self.store.register_user_group_membership( + group_id, user_id, + membership="join", + is_admin=False, + 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({}) @defer.inlineCallbacks def accept_invite(self, group_id, user_id, content): |