mirror of
https://github.com/element-hq/synapse
synced 2024-08-19 09:10:52 +00:00
Merge pull request #4515 from matrix-org/erikj/room_version_v3
Enable support for room version 3
This commit is contained in:
commit
47d03a79fc
5 changed files with 14 additions and 4 deletions
1
changelog.d/4515.feature
Normal file
1
changelog.d/4515.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add support for room version 3
|
|
@ -104,7 +104,7 @@ class ThirdPartyEntityKind(object):
|
||||||
class RoomVersions(object):
|
class RoomVersions(object):
|
||||||
V1 = "1"
|
V1 = "1"
|
||||||
V2 = "2"
|
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"
|
STATE_V2_TEST = "state-v2-test"
|
||||||
|
|
||||||
|
|
||||||
|
@ -116,6 +116,7 @@ DEFAULT_ROOM_VERSION = RoomVersions.V1
|
||||||
KNOWN_ROOM_VERSIONS = {
|
KNOWN_ROOM_VERSIONS = {
|
||||||
RoomVersions.V1,
|
RoomVersions.V1,
|
||||||
RoomVersions.V2,
|
RoomVersions.V2,
|
||||||
|
RoomVersions.V3,
|
||||||
RoomVersions.STATE_V2_TEST,
|
RoomVersions.STATE_V2_TEST,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -346,6 +346,8 @@ def room_version_to_event_format(room_version):
|
||||||
RoomVersions.V1, RoomVersions.V2, RoomVersions.STATE_V2_TEST,
|
RoomVersions.V1, RoomVersions.V2, RoomVersions.STATE_V2_TEST,
|
||||||
):
|
):
|
||||||
return EventFormatVersions.V1
|
return EventFormatVersions.V1
|
||||||
|
elif room_version in (RoomVersions.V3,):
|
||||||
|
return EventFormatVersions.V2
|
||||||
else:
|
else:
|
||||||
raise RuntimeError("Unrecognized room version %s" % (room_version,))
|
raise RuntimeError("Unrecognized room version %s" % (room_version,))
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ import six
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
from twisted.internet.defer import DeferredList
|
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.api.errors import Codes, SynapseError
|
||||||
from synapse.crypto.event_signing import check_event_content_hash
|
from synapse.crypto.event_signing import check_event_content_hash
|
||||||
from synapse.events import event_type_from_format_version
|
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
|
# 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
|
# 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
|
# 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 = [
|
pdus_to_check_event_id = [
|
||||||
p for p in pdus_to_check
|
p for p in pdus_to_check
|
||||||
if p.sender_domain != get_domain_from_id(p.pdu.event_id)
|
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):
|
for p, d in zip(pdus_to_check_event_id, more_deferreds):
|
||||||
p.deferreds.append(d)
|
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
|
# replace lists of deferreds with single Deferreds
|
||||||
return [_flatten_deferred_list(p.deferreds) for p in pdus_to_check]
|
return [_flatten_deferred_list(p.deferreds) for p in pdus_to_check]
|
||||||
|
|
|
@ -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,
|
state_sets, event_map, state_res_store.get_events,
|
||||||
)
|
)
|
||||||
elif room_version in (
|
elif room_version in (
|
||||||
RoomVersions.STATE_V2_TEST, RoomVersions.V2,
|
RoomVersions.STATE_V2_TEST, RoomVersions.V2, RoomVersions.V3,
|
||||||
):
|
):
|
||||||
return v2.resolve_events_with_store(
|
return v2.resolve_events_with_store(
|
||||||
room_version, state_sets, event_map, state_res_store,
|
room_version, state_sets, event_map, state_res_store,
|
||||||
|
|
Loading…
Reference in a new issue