diff options
author | Andrew Morgan <andrew@amorgan.xyz> | 2019-09-04 13:51:23 +0100 |
---|---|---|
committer | Andrew Morgan <andrew@amorgan.xyz> | 2019-09-04 13:56:48 +0100 |
commit | 1c59243f16b55b138435a71ff1288672975e14a5 (patch) | |
tree | f67a2d69b9478b5c6bb7670640486507c5a763b0 /synapse/handlers/room_member.py | |
parent | Fix issues with moving stuff back to RoomMemberHandler (diff) | |
download | synapse-1c59243f16b55b138435a71ff1288672975e14a5.tar.xz |
Factor our v2 invite things
Diffstat (limited to 'synapse/handlers/room_member.py')
-rw-r--r-- | synapse/handlers/room_member.py | 98 |
1 files changed, 19 insertions, 79 deletions
diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py index 5e37d76886..7f3603fd52 100644 --- a/synapse/handlers/room_member.py +++ b/synapse/handlers/room_member.py @@ -684,9 +684,8 @@ class RoomMemberHandler(object): 403, "Looking up third-party identifiers is denied from this server" ) - id_server_url = id_server_scheme + id_server invitee = yield self.lookup_3pid( - id_server_url, medium, address, id_access_token + id_server, medium, address, id_access_token ) if invitee: @@ -695,14 +694,7 @@ class RoomMemberHandler(object): ) else: yield self._make_and_store_3pid_invite( - requester, - id_server, - medium, - address, - room_id, - inviter, - txn_id=txn_id, - id_access_token=id_access_token, + requester, id_server, medium, address, room_id, inviter, txn_id=txn_id ) @defer.inlineCallbacks @@ -710,7 +702,7 @@ class RoomMemberHandler(object): """Looks up a 3pid in the passed identity server. Args: - id_server (str): The server name (including protocol and port, if required) + id_server (str): The server name (including port, if required) of the identity server to use. medium (str): The type of the third party identifier (e.g. "email"). address (str): The third party identifier (e.g. "foo@example.com"). @@ -730,7 +722,9 @@ class RoomMemberHandler(object): hash_details = None try: hash_details = yield self.simple_http_client.get_json( - "%s/_matrix/identity/v2/hash_details" % (id_server,), query_params + "%s%s/_matrix/identity/v2/hash_details" + % (id_server, id_server_scheme), + query_params, ) if not isinstance(hash_details, dict): logger.warn( @@ -765,7 +759,7 @@ class RoomMemberHandler(object): """Looks up a 3pid in the passed identity server using v1 lookup. Args: - id_server (str): The server name (including protocol and port, if required) + id_server (str): The server name (including port, if required) of the identity server to use. medium (str): The type of the third party identifier (e.g. "email"). address (str): The third party identifier (e.g. "foo@example.com"). @@ -775,7 +769,7 @@ class RoomMemberHandler(object): """ try: data = yield self.simple_http_client.get_json( - "%s/_matrix/identity/api/v1/lookup" % (id_server), + "%s%s/_matrix/identity/api/v1/lookup" % (id_server_scheme, id_server), {"medium": medium, "address": address}, ) @@ -797,7 +791,7 @@ class RoomMemberHandler(object): """Looks up a 3pid in the passed identity server using v2 lookup. Args: - id_server (str): The server name (including protocol and port, if required) + id_server (str): The server name (including port, if required) of the identity server to use. id_access_token (str): The access token to authenticate to the identity server with medium (str): The type of the third party identifier (e.g. "email"). @@ -846,7 +840,7 @@ class RoomMemberHandler(object): try: lookup_results = yield self.simple_http_client.post_json_get_json( - "%s/_matrix/identity/v2/lookup" % id_server, + "%s%s/_matrix/identity/v2/lookup" % (id_server_scheme, id_server), { "id_access_token": id_access_token, "addresses": [lookup_value], @@ -876,7 +870,7 @@ class RoomMemberHandler(object): if server_hostname not in data["signatures"]: raise AuthError(401, "No signature from server %s" % (server_hostname,)) for key_name, signature in data["signatures"][server_hostname].items(): - key_data = yield self.http_client.get_json( + key_data = yield self.simple_http_client.get_json( "%s/_matrix/identity/api/v1/pubkey/%s" % (server_hostname, key_name) ) if "public_key" not in key_data: @@ -894,15 +888,7 @@ class RoomMemberHandler(object): @defer.inlineCallbacks def _make_and_store_3pid_invite( - self, - requester, - id_server, - medium, - address, - room_id, - user, - txn_id, - id_access_token=None, + self, requester, id_server, medium, address, room_id, user, txn_id ): room_state = yield self.state_handler.get_current_state(room_id) @@ -951,7 +937,6 @@ class RoomMemberHandler(object): room_name=room_name, inviter_display_name=inviter_display_name, inviter_avatar_url=inviter_avatar_url, - id_access_token=id_access_token, ) ) @@ -989,7 +974,6 @@ class RoomMemberHandler(object): room_name, inviter_display_name, inviter_avatar_url, - id_access_token=None, ): """ Asks an identity server for a third party invite. @@ -1009,8 +993,6 @@ class RoomMemberHandler(object): inviter_display_name (str): The current display name of the inviter. inviter_avatar_url (str): The URL of the inviter's avatar. - id_access_token (str|None): The access token to authenticate to the identity - server with Returns: A deferred tuple containing: @@ -1021,6 +1003,11 @@ class RoomMemberHandler(object): display_name (str): A user-friendly name to represent the invited user. """ + is_url = "%s%s/_matrix/identity/api/v1/store-invite" % ( + id_server_scheme, + id_server, + ) + invite_config = { "medium": medium, "address": address, @@ -1033,40 +1020,11 @@ class RoomMemberHandler(object): "sender_display_name": inviter_display_name, "sender_avatar_url": inviter_avatar_url, } - - # Add the identity service access token to the JSON body and use the v2 - # Identity Service endpoints if id_access_token is present - if id_access_token: - invite_config["id_access_token"] = id_access_token - is_url = "%s%s/_matrix/identity/v2/store-invite" % ( - id_server_scheme, - id_server, - ) - key_validity_url = "%s%s/_matrix/identity/v2/pubkey/isvalid" % ( - id_server_scheme, - id_server, - ) - else: - is_url = "%s%s/_matrix/identity/api/v1/store-invite" % ( - id_server_scheme, - id_server, - ) - key_validity_url = "%s%s/_matrix/identity/api/v1/pubkey/isvalid" % ( - id_server_scheme, - id_server, - ) - - fallback_to_v1 = False try: data = yield self.simple_http_client.post_json_get_json( is_url, invite_config ) except HttpResponseException as e: - if id_access_token and e.code == 404: - # This identity server does not support v2 endpoints - # Fallback to v1 endpoints - fallback_to_v1 = True - # Some identity servers may only support application/x-www-form-urlencoded # types. This is especially true with old instances of Sydent, see # https://github.com/matrix-org/sydent/pull/170 @@ -1079,32 +1037,14 @@ class RoomMemberHandler(object): is_url, invite_config ) - if fallback_to_v1: - return ( - yield self._ask_id_server_for_third_party_invite( - requester, - id_server, - medium, - address, - room_id, - inviter_user_id, - room_alias, - room_avatar_url, - room_join_rules, - room_name, - inviter_display_name, - inviter_avatar_url, - id_access_token=None, # force using v1 endpoints - ) - ) - # TODO: Check for success token = data["token"] public_keys = data.get("public_keys", []) if "public_key" in data: fallback_public_key = { "public_key": data["public_key"], - "key_validity_url": key_validity_url, + "key_validity_url": "%s%s/_matrix/identity/api/v1/pubkey/isvalid" + % (id_server_scheme, id_server), } else: fallback_public_key = public_keys[0] |