diff options
author | Richard van der Hoff <richard@matrix.org> | 2018-07-25 22:25:41 +0100 |
---|---|---|
committer | Richard van der Hoff <richard@matrix.org> | 2018-08-03 16:08:32 +0100 |
commit | 0d63d93ca834771324f0c5b9340346ad2113a4b1 (patch) | |
tree | a76a1d817b4f60034ca7cc7e7b3b6bc308189ff8 /synapse/federation/transport | |
parent | Basic support for room versioning (diff) | |
download | synapse-0d63d93ca834771324f0c5b9340346ad2113a4b1.tar.xz |
Enforce compatibility when processing make_join requests
Reject make_join requests from servers which do not support the room version. Also include the room version in the response.
Diffstat (limited to 'synapse/federation/transport')
-rw-r--r-- | synapse/federation/transport/server.py | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/synapse/federation/transport/server.py b/synapse/federation/transport/server.py index 93bd899b86..77969a4f38 100644 --- a/synapse/federation/transport/server.py +++ b/synapse/federation/transport/server.py @@ -431,9 +431,31 @@ class FederationMakeJoinServlet(BaseFederationServlet): PATH = "/make_join/(?P<context>[^/]*)/(?P<user_id>[^/]*)" @defer.inlineCallbacks - def on_GET(self, origin, content, query, context, user_id): + def on_GET(self, origin, _content, query, context, user_id): + """ + Args: + origin (unicode): The authenticated server_name of the calling server + + _content (None): (GETs don't have bodies) + + query (dict[bytes, list[bytes]]): Query params from the request. + + **kwargs (dict[unicode, unicode]): the dict mapping keys to path + components as specified in the path match regexp. + + Returns: + Deferred[(int, object)|None]: either (response code, response object) to + return a JSON response, or None if the request has already been handled. + """ + versions = query.get(b'ver') + if versions is not None: + supported_versions = [v.decode("utf-8") for v in versions] + else: + supported_versions = ["1"] + content = yield self.handler.on_make_join_request( origin, context, user_id, + supported_versions=supported_versions, ) defer.returnValue((200, content)) |