diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2018-08-08 17:10:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-08 17:10:53 +0100 |
commit | 8521ae13e33301e06eb1fb5b36a8eef4e7f6453f (patch) | |
tree | fa2749c97eb5ada93e0d7dd620e429b19d00664f /synapse/federation/federation_server.py | |
parent | Merge pull request #3662 from matrix-org/neilj/reserved_users (diff) | |
parent | Don't expose default_room_version as config opt (diff) | |
download | synapse-8521ae13e33301e06eb1fb5b36a8eef4e7f6453f.tar.xz |
Merge pull request #3654 from matrix-org/rav/room_versions
Support for room versioning
Diffstat (limited to 'synapse/federation/federation_server.py')
-rw-r--r-- | synapse/federation/federation_server.py | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/synapse/federation/federation_server.py b/synapse/federation/federation_server.py index bf89d568af..2b62f687b6 100644 --- a/synapse/federation/federation_server.py +++ b/synapse/federation/federation_server.py @@ -27,7 +27,13 @@ from twisted.internet.abstract import isIPAddress from twisted.python import failure from synapse.api.constants import EventTypes -from synapse.api.errors import AuthError, FederationError, NotFoundError, SynapseError +from synapse.api.errors import ( + AuthError, + FederationError, + IncompatibleRoomVersionError, + NotFoundError, + SynapseError, +) from synapse.crypto.event_signing import compute_event_signature from synapse.federation.federation_base import FederationBase, event_from_pdu_json from synapse.federation.persistence import TransactionActions @@ -323,12 +329,21 @@ class FederationServer(FederationBase): defer.returnValue((200, resp)) @defer.inlineCallbacks - def on_make_join_request(self, origin, room_id, user_id): + def on_make_join_request(self, origin, room_id, user_id, supported_versions): origin_host, _ = parse_server_name(origin) yield self.check_server_matches_acl(origin_host, room_id) + + room_version = yield self.store.get_room_version(room_id) + if room_version not in supported_versions: + logger.warn("Room version %s not in %s", room_version, supported_versions) + raise IncompatibleRoomVersionError(room_version=room_version) + pdu = yield self.handler.on_make_join_request(room_id, user_id) time_now = self._clock.time_msec() - defer.returnValue({"event": pdu.get_pdu_json(time_now)}) + defer.returnValue({ + "event": pdu.get_pdu_json(time_now), + "room_version": room_version, + }) @defer.inlineCallbacks def on_invite_request(self, origin, content): |