summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erikj@jki.re>2019-01-29 23:53:14 +0000
committerGitHub <noreply@github.com>2019-01-29 23:53:14 +0000
commit47d03a79fc03e1cea1ee5b2c6906b64dc8b7baf2 (patch)
treeb6ebd2855bfa7e7f1f5c80e8bd560b270a829968
parentMerge pull request #4499 from matrix-org/erikj/redactions_eiah (diff)
parentNo vdh tests! (diff)
downloadsynapse-47d03a79fc03e1cea1ee5b2c6906b64dc8b7baf2.tar.xz
Merge pull request #4515 from matrix-org/erikj/room_version_v3
Enable support for room version 3
-rw-r--r--changelog.d/4515.feature1
-rw-r--r--synapse/api/constants.py3
-rw-r--r--synapse/events/__init__.py2
-rw-r--r--synapse/federation/federation_base.py10
-rw-r--r--synapse/state/__init__.py2
5 files changed, 14 insertions, 4 deletions
diff --git a/changelog.d/4515.feature b/changelog.d/4515.feature
new file mode 100644
index 0000000000..9538c64f08
--- /dev/null
+++ b/changelog.d/4515.feature
@@ -0,0 +1 @@
+Add support for room version 3
diff --git a/synapse/api/constants.py b/synapse/api/constants.py
index 4912a55785..ba519005ca 100644
--- a/synapse/api/constants.py
+++ b/synapse/api/constants.py
@@ -104,7 +104,7 @@ class ThirdPartyEntityKind(object):
 class RoomVersions(object):
     V1 = "1"
     V2 = "2"
-    V3 = "3"  # Not currently fully supported, so we don't add to known versions below
+    V3 = "3"
     STATE_V2_TEST = "state-v2-test"
 
 
@@ -116,6 +116,7 @@ DEFAULT_ROOM_VERSION = RoomVersions.V1
 KNOWN_ROOM_VERSIONS = {
     RoomVersions.V1,
     RoomVersions.V2,
+    RoomVersions.V3,
     RoomVersions.STATE_V2_TEST,
 }
 
diff --git a/synapse/events/__init__.py b/synapse/events/__init__.py
index 697cf58582..20c1ab4203 100644
--- a/synapse/events/__init__.py
+++ b/synapse/events/__init__.py
@@ -346,6 +346,8 @@ def room_version_to_event_format(room_version):
         RoomVersions.V1, RoomVersions.V2, RoomVersions.STATE_V2_TEST,
     ):
         return EventFormatVersions.V1
+    elif room_version in (RoomVersions.V3,):
+        return EventFormatVersions.V2
     else:
         raise RuntimeError("Unrecognized room version %s" % (room_version,))
 
diff --git a/synapse/federation/federation_base.py b/synapse/federation/federation_base.py
index a400091db7..a7a2ec4523 100644
--- a/synapse/federation/federation_base.py
+++ b/synapse/federation/federation_base.py
@@ -20,7 +20,7 @@ import six
 from twisted.internet import defer
 from twisted.internet.defer import DeferredList
 
-from synapse.api.constants import KNOWN_ROOM_VERSIONS, MAX_DEPTH, EventTypes, Membership
+from synapse.api.constants import MAX_DEPTH, EventTypes, Membership, RoomVersions
 from synapse.api.errors import Codes, SynapseError
 from synapse.crypto.event_signing import check_event_content_hash
 from synapse.events import event_type_from_format_version
@@ -274,7 +274,9 @@ def _check_sigs_on_pdus(keyring, room_version, pdus):
     # now let's look for events where the sender's domain is different to the
     # event id's domain (normally only the case for joins/leaves), and add additional
     # checks. Only do this if the room version has a concept of event ID domain
-    if room_version in KNOWN_ROOM_VERSIONS:
+    if room_version in (
+        RoomVersions.V1, RoomVersions.V2, RoomVersions.STATE_V2_TEST,
+    ):
         pdus_to_check_event_id = [
             p for p in pdus_to_check
             if p.sender_domain != get_domain_from_id(p.pdu.event_id)
@@ -287,6 +289,10 @@ def _check_sigs_on_pdus(keyring, room_version, pdus):
 
         for p, d in zip(pdus_to_check_event_id, more_deferreds):
             p.deferreds.append(d)
+    elif room_version in (RoomVersions.V3,):
+        pass  # No further checks needed, as event IDs are hashes here
+    else:
+        raise RuntimeError("Unrecognized room version %s" % (room_version,))
 
     # replace lists of deferreds with single Deferreds
     return [_flatten_deferred_list(p.deferreds) for p in pdus_to_check]
diff --git a/synapse/state/__init__.py b/synapse/state/__init__.py
index 125635b01a..68058f613c 100644
--- a/synapse/state/__init__.py
+++ b/synapse/state/__init__.py
@@ -608,7 +608,7 @@ def resolve_events_with_store(room_version, state_sets, event_map, state_res_sto
             state_sets, event_map, state_res_store.get_events,
         )
     elif room_version in (
-        RoomVersions.STATE_V2_TEST, RoomVersions.V2,
+        RoomVersions.STATE_V2_TEST, RoomVersions.V2, RoomVersions.V3,
     ):
         return v2.resolve_events_with_store(
             room_version, state_sets, event_map, state_res_store,