summary refs log tree commit diff
path: root/synapse/handlers/room_member.py
diff options
context:
space:
mode:
authorAndrew Morgan <andrew@amorgan.xyz>2019-09-04 13:51:23 +0100
committerAndrew Morgan <andrew@amorgan.xyz>2019-09-04 13:56:48 +0100
commit1c59243f16b55b138435a71ff1288672975e14a5 (patch)
treef67a2d69b9478b5c6bb7670640486507c5a763b0 /synapse/handlers/room_member.py
parentFix issues with moving stuff back to RoomMemberHandler (diff)
downloadsynapse-1c59243f16b55b138435a71ff1288672975e14a5.tar.xz
Factor our v2 invite things
Diffstat (limited to 'synapse/handlers/room_member.py')
-rw-r--r--synapse/handlers/room_member.py98
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]