mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-14 06:23:47 +01:00
Support MSC3375: room version 9. (#10747)
This commit is contained in:
parent
c6e103c1a6
commit
ae3c16318b
4 changed files with 79 additions and 1 deletions
1
changelog.d/10747.feature
Normal file
1
changelog.d/10747.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Support room version 9 from [MSC3375](https://github.com/matrix-org/matrix-doc/pull/3375).
|
|
@ -70,6 +70,9 @@ class RoomVersion:
|
||||||
msc2176_redaction_rules = attr.ib(type=bool)
|
msc2176_redaction_rules = attr.ib(type=bool)
|
||||||
# MSC3083: Support the 'restricted' join_rule.
|
# MSC3083: Support the 'restricted' join_rule.
|
||||||
msc3083_join_rules = attr.ib(type=bool)
|
msc3083_join_rules = attr.ib(type=bool)
|
||||||
|
# MSC3375: Support for the proper redaction rules for MSC3083. This mustn't
|
||||||
|
# be enabled if MSC3083 is not.
|
||||||
|
msc3375_redaction_rules = attr.ib(type=bool)
|
||||||
# MSC2403: Allows join_rules to be set to 'knock', changes auth rules to allow sending
|
# MSC2403: Allows join_rules to be set to 'knock', changes auth rules to allow sending
|
||||||
# m.room.membership event with membership 'knock'.
|
# m.room.membership event with membership 'knock'.
|
||||||
msc2403_knocking = attr.ib(type=bool)
|
msc2403_knocking = attr.ib(type=bool)
|
||||||
|
@ -92,6 +95,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=False,
|
limit_notifications_power_levels=False,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=False,
|
msc2403_knocking=False,
|
||||||
msc2716_historical=False,
|
msc2716_historical=False,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -107,6 +111,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=False,
|
limit_notifications_power_levels=False,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=False,
|
msc2403_knocking=False,
|
||||||
msc2716_historical=False,
|
msc2716_historical=False,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -122,6 +127,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=False,
|
limit_notifications_power_levels=False,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=False,
|
msc2403_knocking=False,
|
||||||
msc2716_historical=False,
|
msc2716_historical=False,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -137,6 +143,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=False,
|
limit_notifications_power_levels=False,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=False,
|
msc2403_knocking=False,
|
||||||
msc2716_historical=False,
|
msc2716_historical=False,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -152,6 +159,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=False,
|
limit_notifications_power_levels=False,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=False,
|
msc2403_knocking=False,
|
||||||
msc2716_historical=False,
|
msc2716_historical=False,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -167,6 +175,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=True,
|
limit_notifications_power_levels=True,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=False,
|
msc2403_knocking=False,
|
||||||
msc2716_historical=False,
|
msc2716_historical=False,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -182,6 +191,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=True,
|
limit_notifications_power_levels=True,
|
||||||
msc2176_redaction_rules=True,
|
msc2176_redaction_rules=True,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=False,
|
msc2403_knocking=False,
|
||||||
msc2716_historical=False,
|
msc2716_historical=False,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -197,6 +207,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=True,
|
limit_notifications_power_levels=True,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=True,
|
msc2403_knocking=True,
|
||||||
msc2716_historical=False,
|
msc2716_historical=False,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -212,6 +223,23 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=True,
|
limit_notifications_power_levels=True,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=True,
|
msc3083_join_rules=True,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
|
msc2403_knocking=True,
|
||||||
|
msc2716_historical=False,
|
||||||
|
msc2716_redactions=False,
|
||||||
|
)
|
||||||
|
V9 = RoomVersion(
|
||||||
|
"9",
|
||||||
|
RoomDisposition.STABLE,
|
||||||
|
EventFormatVersions.V3,
|
||||||
|
StateResolutionVersions.V2,
|
||||||
|
enforce_key_validity=True,
|
||||||
|
special_case_aliases_auth=False,
|
||||||
|
strict_canonicaljson=True,
|
||||||
|
limit_notifications_power_levels=True,
|
||||||
|
msc2176_redaction_rules=False,
|
||||||
|
msc3083_join_rules=True,
|
||||||
|
msc3375_redaction_rules=True,
|
||||||
msc2403_knocking=True,
|
msc2403_knocking=True,
|
||||||
msc2716_historical=False,
|
msc2716_historical=False,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -227,6 +255,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=True,
|
limit_notifications_power_levels=True,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=True,
|
msc2403_knocking=True,
|
||||||
msc2716_historical=True,
|
msc2716_historical=True,
|
||||||
msc2716_redactions=False,
|
msc2716_redactions=False,
|
||||||
|
@ -242,6 +271,7 @@ class RoomVersions:
|
||||||
limit_notifications_power_levels=True,
|
limit_notifications_power_levels=True,
|
||||||
msc2176_redaction_rules=False,
|
msc2176_redaction_rules=False,
|
||||||
msc3083_join_rules=False,
|
msc3083_join_rules=False,
|
||||||
|
msc3375_redaction_rules=False,
|
||||||
msc2403_knocking=True,
|
msc2403_knocking=True,
|
||||||
msc2716_historical=True,
|
msc2716_historical=True,
|
||||||
msc2716_redactions=True,
|
msc2716_redactions=True,
|
||||||
|
@ -261,6 +291,7 @@ KNOWN_ROOM_VERSIONS: Dict[str, RoomVersion] = {
|
||||||
RoomVersions.V7,
|
RoomVersions.V7,
|
||||||
RoomVersions.MSC2716,
|
RoomVersions.MSC2716,
|
||||||
RoomVersions.V8,
|
RoomVersions.V8,
|
||||||
|
RoomVersions.V9,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,8 @@ def prune_event_dict(room_version: RoomVersion, event_dict: dict) -> dict:
|
||||||
|
|
||||||
if event_type == EventTypes.Member:
|
if event_type == EventTypes.Member:
|
||||||
add_fields("membership")
|
add_fields("membership")
|
||||||
|
if room_version.msc3375_redaction_rules:
|
||||||
|
add_fields("join_authorised_via_users_server")
|
||||||
elif event_type == EventTypes.Create:
|
elif event_type == EventTypes.Create:
|
||||||
# MSC2176 rules state that create events cannot be redacted.
|
# MSC2176 rules state that create events cannot be redacted.
|
||||||
if room_version.msc2176_redaction_rules:
|
if room_version.msc2176_redaction_rules:
|
||||||
|
|
|
@ -322,7 +322,7 @@ class PruneEventTestCase(unittest.TestCase):
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
# After MSC3083, alias events have no special behavior.
|
# After MSC3083, the allow key is protected from redaction.
|
||||||
self.run_test(
|
self.run_test(
|
||||||
{
|
{
|
||||||
"type": "m.room.join_rules",
|
"type": "m.room.join_rules",
|
||||||
|
@ -344,6 +344,50 @@ class PruneEventTestCase(unittest.TestCase):
|
||||||
room_version=RoomVersions.V8,
|
room_version=RoomVersions.V8,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_member(self):
|
||||||
|
"""Member events have changed behavior starting with MSC3375."""
|
||||||
|
self.run_test(
|
||||||
|
{
|
||||||
|
"type": "m.room.member",
|
||||||
|
"event_id": "$test:domain",
|
||||||
|
"content": {
|
||||||
|
"membership": "join",
|
||||||
|
"join_authorised_via_users_server": "@user:domain",
|
||||||
|
"other_key": "stripped",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "m.room.member",
|
||||||
|
"event_id": "$test:domain",
|
||||||
|
"content": {"membership": "join"},
|
||||||
|
"signatures": {},
|
||||||
|
"unsigned": {},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
# After MSC3375, the join_authorised_via_users_server key is protected
|
||||||
|
# from redaction.
|
||||||
|
self.run_test(
|
||||||
|
{
|
||||||
|
"type": "m.room.member",
|
||||||
|
"content": {
|
||||||
|
"membership": "join",
|
||||||
|
"join_authorised_via_users_server": "@user:domain",
|
||||||
|
"other_key": "stripped",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "m.room.member",
|
||||||
|
"content": {
|
||||||
|
"membership": "join",
|
||||||
|
"join_authorised_via_users_server": "@user:domain",
|
||||||
|
},
|
||||||
|
"signatures": {},
|
||||||
|
"unsigned": {},
|
||||||
|
},
|
||||||
|
room_version=RoomVersions.V9,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class SerializeEventTestCase(unittest.TestCase):
|
class SerializeEventTestCase(unittest.TestCase):
|
||||||
def serialize(self, ev, fields):
|
def serialize(self, ev, fields):
|
||||||
|
|
Loading…
Reference in a new issue