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/handlers/room.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/handlers/room.py')
-rw-r--r-- | synapse/handlers/room.py | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py index 7b7804d9b2..6a17c42238 100644 --- a/synapse/handlers/room.py +++ b/synapse/handlers/room.py @@ -21,9 +21,17 @@ import math import string from collections import OrderedDict +from six import string_types + from twisted.internet import defer -from synapse.api.constants import EventTypes, JoinRules, RoomCreationPreset +from synapse.api.constants import ( + DEFAULT_ROOM_VERSION, + KNOWN_ROOM_VERSIONS, + EventTypes, + JoinRules, + RoomCreationPreset, +) from synapse.api.errors import AuthError, Codes, StoreError, SynapseError from synapse.types import RoomAlias, RoomID, RoomStreamToken, StreamToken, UserID from synapse.util import stringutils @@ -99,6 +107,21 @@ class RoomCreationHandler(BaseHandler): if ratelimit: yield self.ratelimit(requester) + room_version = config.get("room_version", DEFAULT_ROOM_VERSION) + if not isinstance(room_version, string_types): + raise SynapseError( + 400, + "room_version must be a string", + Codes.BAD_JSON, + ) + + if room_version not in KNOWN_ROOM_VERSIONS: + raise SynapseError( + 400, + "Your homeserver does not support this room version", + Codes.UNSUPPORTED_ROOM_VERSION, + ) + if "room_alias_name" in config: for wchar in string.whitespace: if wchar in config["room_alias_name"]: @@ -184,6 +207,9 @@ class RoomCreationHandler(BaseHandler): creation_content = config.get("creation_content", {}) + # override any attempt to set room versions via the creation_content + creation_content["room_version"] = room_version + room_member_handler = self.hs.get_room_member_handler() yield self._send_events_for_new_room( |