Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit a89b49c

Browse files
committed
Support room version 9.
1 parent c6e103c commit a89b49c

File tree

3 files changed

+79
-2
lines changed

3 files changed

+79
-2
lines changed

synapse/api/room_versions.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ class RoomVersion:
7070
msc2176_redaction_rules = attr.ib(type=bool)
7171
# MSC3083: Support the 'restricted' join_rule.
7272
msc3083_join_rules = attr.ib(type=bool)
73+
# MSC3375: Support for the proper redaction rules for MSC3083. This mustn't
74+
# be enabled if MSC3083 is not.
75+
msc3375_redaction_rules = attr.ib(type=bool)
7376
# MSC2403: Allows join_rules to be set to 'knock', changes auth rules to allow sending
7477
# m.room.membership event with membership 'knock'.
7578
msc2403_knocking = attr.ib(type=bool)
@@ -92,6 +95,7 @@ class RoomVersions:
9295
limit_notifications_power_levels=False,
9396
msc2176_redaction_rules=False,
9497
msc3083_join_rules=False,
98+
msc3375_redaction_rules=False,
9599
msc2403_knocking=False,
96100
msc2716_historical=False,
97101
msc2716_redactions=False,
@@ -107,6 +111,7 @@ class RoomVersions:
107111
limit_notifications_power_levels=False,
108112
msc2176_redaction_rules=False,
109113
msc3083_join_rules=False,
114+
msc3375_redaction_rules=False,
110115
msc2403_knocking=False,
111116
msc2716_historical=False,
112117
msc2716_redactions=False,
@@ -122,6 +127,7 @@ class RoomVersions:
122127
limit_notifications_power_levels=False,
123128
msc2176_redaction_rules=False,
124129
msc3083_join_rules=False,
130+
msc3375_redaction_rules=False,
125131
msc2403_knocking=False,
126132
msc2716_historical=False,
127133
msc2716_redactions=False,
@@ -137,6 +143,7 @@ class RoomVersions:
137143
limit_notifications_power_levels=False,
138144
msc2176_redaction_rules=False,
139145
msc3083_join_rules=False,
146+
msc3375_redaction_rules=False,
140147
msc2403_knocking=False,
141148
msc2716_historical=False,
142149
msc2716_redactions=False,
@@ -152,6 +159,7 @@ class RoomVersions:
152159
limit_notifications_power_levels=False,
153160
msc2176_redaction_rules=False,
154161
msc3083_join_rules=False,
162+
msc3375_redaction_rules=False,
155163
msc2403_knocking=False,
156164
msc2716_historical=False,
157165
msc2716_redactions=False,
@@ -167,6 +175,7 @@ class RoomVersions:
167175
limit_notifications_power_levels=True,
168176
msc2176_redaction_rules=False,
169177
msc3083_join_rules=False,
178+
msc3375_redaction_rules=False,
170179
msc2403_knocking=False,
171180
msc2716_historical=False,
172181
msc2716_redactions=False,
@@ -182,6 +191,7 @@ class RoomVersions:
182191
limit_notifications_power_levels=True,
183192
msc2176_redaction_rules=True,
184193
msc3083_join_rules=False,
194+
msc3375_redaction_rules=False,
185195
msc2403_knocking=False,
186196
msc2716_historical=False,
187197
msc2716_redactions=False,
@@ -197,12 +207,29 @@ class RoomVersions:
197207
limit_notifications_power_levels=True,
198208
msc2176_redaction_rules=False,
199209
msc3083_join_rules=False,
210+
msc3375_redaction_rules=False,
200211
msc2403_knocking=True,
201212
msc2716_historical=False,
202213
msc2716_redactions=False,
203214
)
204215
V8 = RoomVersion(
205216
"8",
217+
RoomDisposition.UNSTABLE,
218+
EventFormatVersions.V3,
219+
StateResolutionVersions.V2,
220+
enforce_key_validity=True,
221+
special_case_aliases_auth=False,
222+
strict_canonicaljson=True,
223+
limit_notifications_power_levels=True,
224+
msc2176_redaction_rules=False,
225+
msc3083_join_rules=True,
226+
msc3375_redaction_rules=False,
227+
msc2403_knocking=True,
228+
msc2716_historical=False,
229+
msc2716_redactions=False,
230+
)
231+
V9 = RoomVersion(
232+
"9",
206233
RoomDisposition.STABLE,
207234
EventFormatVersions.V3,
208235
StateResolutionVersions.V2,
@@ -212,6 +239,7 @@ class RoomVersions:
212239
limit_notifications_power_levels=True,
213240
msc2176_redaction_rules=False,
214241
msc3083_join_rules=True,
242+
msc3375_redaction_rules=True,
215243
msc2403_knocking=True,
216244
msc2716_historical=False,
217245
msc2716_redactions=False,
@@ -227,6 +255,7 @@ class RoomVersions:
227255
limit_notifications_power_levels=True,
228256
msc2176_redaction_rules=False,
229257
msc3083_join_rules=False,
258+
msc3375_redaction_rules=False,
230259
msc2403_knocking=True,
231260
msc2716_historical=True,
232261
msc2716_redactions=False,
@@ -242,6 +271,7 @@ class RoomVersions:
242271
limit_notifications_power_levels=True,
243272
msc2176_redaction_rules=False,
244273
msc3083_join_rules=False,
274+
msc3375_redaction_rules=False,
245275
msc2403_knocking=True,
246276
msc2716_historical=True,
247277
msc2716_redactions=True,
@@ -261,6 +291,7 @@ class RoomVersions:
261291
RoomVersions.V7,
262292
RoomVersions.MSC2716,
263293
RoomVersions.V8,
294+
RoomVersions.V9,
264295
)
265296
}
266297

@@ -293,7 +324,7 @@ class RoomVersionCapability:
293324
),
294325
RoomVersionCapability(
295326
"restricted",
296-
RoomVersions.V8,
327+
RoomVersions.V9,
297328
lambda room_version: room_version.msc3083_join_rules,
298329
),
299330
)

synapse/events/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ def add_fields(*fields):
104104

105105
if event_type == EventTypes.Member:
106106
add_fields("membership")
107+
if room_version.msc3375_redaction_rules:
108+
add_fields("join_authorised_via_users_server")
107109
elif event_type == EventTypes.Create:
108110
# MSC2176 rules state that create events cannot be redacted.
109111
if room_version.msc2176_redaction_rules:

tests/events/test_utils.py

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ def test_join_rules(self):
322322
},
323323
)
324324

325-
# After MSC3083, alias events have no special behavior.
325+
# After MSC3083, the allow key is protected from redaction.
326326
self.run_test(
327327
{
328328
"type": "m.room.join_rules",
@@ -344,6 +344,50 @@ def test_join_rules(self):
344344
room_version=RoomVersions.V8,
345345
)
346346

347+
def test_member(self):
348+
"""Member events have changed behavior starting with MSC3375."""
349+
self.run_test(
350+
{
351+
"type": "m.room.member",
352+
"event_id": "$test:domain",
353+
"content": {
354+
"membership": "join",
355+
"join_authorised_via_users_server": "@user:domain",
356+
"other_key": "stripped",
357+
},
358+
},
359+
{
360+
"type": "m.room.member",
361+
"event_id": "$test:domain",
362+
"content": {"membership": "join"},
363+
"signatures": {},
364+
"unsigned": {},
365+
},
366+
)
367+
368+
# After MSC3375, the join_authorised_via_users_server key is protected
369+
# from redaction.
370+
self.run_test(
371+
{
372+
"type": "m.room.member",
373+
"content": {
374+
"membership": "join",
375+
"join_authorised_via_users_server": "@user:domain",
376+
"other_key": "stripped",
377+
},
378+
},
379+
{
380+
"type": "m.room.member",
381+
"content": {
382+
"membership": "join",
383+
"join_authorised_via_users_server": "@user:domain",
384+
},
385+
"signatures": {},
386+
"unsigned": {},
387+
},
388+
room_version=RoomVersions.V9,
389+
)
390+
347391

348392
class SerializeEventTestCase(unittest.TestCase):
349393
def serialize(self, ev, fields):

0 commit comments

Comments
 (0)