mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-26 11:36:03 +03:00
Add a test room version which updates event ID format (#5210)
Implements MSC1884
This commit is contained in:
parent
edef6d29ae
commit
5206648a4a
3 changed files with 34 additions and 3 deletions
1
changelog.d/5210.feature
Normal file
1
changelog.d/5210.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add a new room version which uses a new event ID format.
|
|
@ -19,13 +19,15 @@ class EventFormatVersions(object):
|
||||||
"""This is an internal enum for tracking the version of the event format,
|
"""This is an internal enum for tracking the version of the event format,
|
||||||
independently from the room version.
|
independently from the room version.
|
||||||
"""
|
"""
|
||||||
V1 = 1 # $id:server format
|
V1 = 1 # $id:server event id format
|
||||||
V2 = 2 # MSC1659-style $hash format: introduced for room v3
|
V2 = 2 # MSC1659-style $hash event id format: introduced for room v3
|
||||||
|
V3 = 3 # MSC1884-style $hash format: introduced for room v4
|
||||||
|
|
||||||
|
|
||||||
KNOWN_EVENT_FORMAT_VERSIONS = {
|
KNOWN_EVENT_FORMAT_VERSIONS = {
|
||||||
EventFormatVersions.V1,
|
EventFormatVersions.V1,
|
||||||
EventFormatVersions.V2,
|
EventFormatVersions.V2,
|
||||||
|
EventFormatVersions.V3,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -75,6 +77,12 @@ class RoomVersions(object):
|
||||||
EventFormatVersions.V2,
|
EventFormatVersions.V2,
|
||||||
StateResolutionVersions.V2,
|
StateResolutionVersions.V2,
|
||||||
)
|
)
|
||||||
|
EVENTID_NOSLASH_TEST = RoomVersion(
|
||||||
|
"eventid-noslash-test",
|
||||||
|
RoomDisposition.UNSTABLE,
|
||||||
|
EventFormatVersions.V3,
|
||||||
|
StateResolutionVersions.V2,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# the version we will give rooms which are created on this server
|
# the version we will give rooms which are created on this server
|
||||||
|
@ -87,5 +95,6 @@ KNOWN_ROOM_VERSIONS = {
|
||||||
RoomVersions.V2,
|
RoomVersions.V2,
|
||||||
RoomVersions.V3,
|
RoomVersions.V3,
|
||||||
RoomVersions.STATE_V2_TEST,
|
RoomVersions.STATE_V2_TEST,
|
||||||
|
RoomVersions.EVENTID_NOSLASH_TEST,
|
||||||
)
|
)
|
||||||
} # type: dict[str, RoomVersion]
|
} # type: dict[str, RoomVersion]
|
||||||
|
|
|
@ -335,13 +335,32 @@ class FrozenEventV2(EventBase):
|
||||||
return self.__repr__()
|
return self.__repr__()
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<FrozenEventV2 event_id='%s', type='%s', state_key='%s'>" % (
|
return "<%s event_id='%s', type='%s', state_key='%s'>" % (
|
||||||
|
self.__class__.__name__,
|
||||||
self.event_id,
|
self.event_id,
|
||||||
self.get("type", None),
|
self.get("type", None),
|
||||||
self.get("state_key", None),
|
self.get("state_key", None),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class FrozenEventV3(FrozenEventV2):
|
||||||
|
"""FrozenEventV3, which differs from FrozenEventV2 only in the event_id format"""
|
||||||
|
format_version = EventFormatVersions.V3 # All events of this type are V3
|
||||||
|
|
||||||
|
@property
|
||||||
|
def event_id(self):
|
||||||
|
# We have to import this here as otherwise we get an import loop which
|
||||||
|
# is hard to break.
|
||||||
|
from synapse.crypto.event_signing import compute_event_reference_hash
|
||||||
|
|
||||||
|
if self._event_id:
|
||||||
|
return self._event_id
|
||||||
|
self._event_id = "$" + encode_base64(
|
||||||
|
compute_event_reference_hash(self)[1], urlsafe=True
|
||||||
|
)
|
||||||
|
return self._event_id
|
||||||
|
|
||||||
|
|
||||||
def room_version_to_event_format(room_version):
|
def room_version_to_event_format(room_version):
|
||||||
"""Converts a room version string to the event format
|
"""Converts a room version string to the event format
|
||||||
|
|
||||||
|
@ -376,6 +395,8 @@ def event_type_from_format_version(format_version):
|
||||||
return FrozenEvent
|
return FrozenEvent
|
||||||
elif format_version == EventFormatVersions.V2:
|
elif format_version == EventFormatVersions.V2:
|
||||||
return FrozenEventV2
|
return FrozenEventV2
|
||||||
|
elif format_version == EventFormatVersions.V3:
|
||||||
|
return FrozenEventV3
|
||||||
else:
|
else:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
"No event format %r" % (format_version,)
|
"No event format %r" % (format_version,)
|
||||||
|
|
Loading…
Reference in a new issue