diff --git a/changelog.d/10489.feature b/changelog.d/10489.feature
new file mode 100644
index 0000000000..df8bb51167
--- /dev/null
+++ b/changelog.d/10489.feature
@@ -0,0 +1 @@
+Update support for [MSC3083](https://github.com/matrix-org/matrix-doc/pull/3083) to consider changes in the MSC around which servers can issue join events.
diff --git a/synapse/events/utils.py b/synapse/events/utils.py
index ec96999e4e..f4da9e0923 100644
--- a/synapse/events/utils.py
+++ b/synapse/events/utils.py
@@ -109,6 +109,8 @@ def prune_event_dict(room_version: RoomVersion, event_dict: dict) -> dict:
add_fields("creator")
elif event_type == EventTypes.JoinRules:
add_fields("join_rule")
+ if room_version.msc3083_join_rules:
+ add_fields("allow")
elif event_type == EventTypes.PowerLevels:
add_fields(
"users",
diff --git a/tests/events/test_utils.py b/tests/events/test_utils.py
index 9274ce4c39..e2a5fc018c 100644
--- a/tests/events/test_utils.py
+++ b/tests/events/test_utils.py
@@ -301,6 +301,49 @@ class PruneEventTestCase(unittest.TestCase):
room_version=RoomVersions.MSC2176,
)
+ def test_join_rules(self):
+ """Join rules events have changed behavior starting with MSC3083."""
+ self.run_test(
+ {
+ "type": "m.room.join_rules",
+ "event_id": "$test:domain",
+ "content": {
+ "join_rule": "invite",
+ "allow": [],
+ "other_key": "stripped",
+ },
+ },
+ {
+ "type": "m.room.join_rules",
+ "event_id": "$test:domain",
+ "content": {"join_rule": "invite"},
+ "signatures": {},
+ "unsigned": {},
+ },
+ )
+
+ # After MSC3083, alias events have no special behavior.
+ self.run_test(
+ {
+ "type": "m.room.join_rules",
+ "content": {
+ "join_rule": "invite",
+ "allow": [],
+ "other_key": "stripped",
+ },
+ },
+ {
+ "type": "m.room.join_rules",
+ "content": {
+ "join_rule": "invite",
+ "allow": [],
+ },
+ "signatures": {},
+ "unsigned": {},
+ },
+ room_version=RoomVersions.MSC3083,
+ )
+
class SerializeEventTestCase(unittest.TestCase):
def serialize(self, ev, fields):
|