From 35896ed1ee2a3f586fbc4ce2bffea5984990484c Mon Sep 17 00:00:00 2001 From: Kierre Date: Mon, 27 Oct 2025 10:05:33 -0400 Subject: [PATCH] Implement room V11 --- MSCs.md | 1 + vona/federation/rooms.py | 4 +++- vona/globals/__init__.py | 9 ++++++++- vona/utils/roomwithver.py | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/MSCs.md b/MSCs.md index 464dc6f..d524099 100644 --- a/MSCs.md +++ b/MSCs.md @@ -38,3 +38,4 @@ Room version MSCs: * [MSC3289: Room V8](https://github.com/matrix-org/matrix-spec-proposals/blob/main/proposals/3289-rooms-v8.md) * [MSC3375: Room V9](https://github.com/matrix-org/matrix-spec-proposals/blob/main/proposals/3375-room-v9.md) * [MSC3604: Room V10](https://github.com/matrix-org/matrix-spec-proposals/blob/main/proposals/3604-rooms-v10.md) +* [MSC3820: Room V11](https://github.com/matrix-org/matrix-spec-proposals/blob/main/proposals/3820-rooms-v11.md) diff --git a/vona/federation/rooms.py b/vona/federation/rooms.py index 1ae4aa9..70d78ea 100644 --- a/vona/federation/rooms.py +++ b/vona/federation/rooms.py @@ -223,6 +223,8 @@ def v3(request, room) -> dict: del event["signatures"] # m.room.create doesn't have prev_events or auth_events + if ver >= 11: + del events["m.room.create"]["content"]["creator"] events["m.room.create"] = globals.hash_and_sign_event(events["m.room.create"], ver) hash_map["m.room.create"] = globals.make_ref_hash(events["m.room.create"], ver) @@ -236,7 +238,7 @@ def v3(request, room) -> dict: hash_map["m.room.member"], ] events["m.room.power_levels"]["prev_events"] = [hash_map["m.room.member"]] - if ver == 10: + if ver >= 10: events["m.room.power_levels"]["content"]["users"][f"@vona:{config.server_name}"] = 100 events["m.room.power_levels"] = globals.hash_and_sign_event(events["m.room.power_levels"], ver) hash_map["m.room.power_levels"] = globals.make_ref_hash(events["m.room.power_levels"], ver) diff --git a/vona/globals/__init__.py b/vona/globals/__init__.py index 35c1f06..041335e 100644 --- a/vona/globals/__init__.py +++ b/vona/globals/__init__.py @@ -274,7 +274,11 @@ def hash_and_sign_event( ): content_hash = event_hash(event_object) event_object["hashes"] = {"sha256": content_hash} - stripped_object = redact_event(event_object, room_ver) + stripped_object = redact_event( + event=event_object, + for_event_id=False, + room_ver=room_ver, + ) signed_object = sign_json(stripped_object) event_object["signatures"] = signed_object["signatures"] return event_object @@ -313,6 +317,7 @@ def room_version_from_id(room): hexadecimal_room_id = bytes(room_id_no_sigil, "utf-8").hex() versions = [str(i) for i in range(0, 10)] + versions.append("a") if not any(ver in hexadecimal_room_id for ver in versions): hexadecimal_room_id = "2" + hexadecimal_room_id[1:] @@ -330,6 +335,8 @@ def room_version_from_id(room): actual_most_common = most_common[0] if most_common else ("4",) if actual_most_common[0] == "0": return ("10",) + elif actual_most_common[0] == "a": + return ("11",) return actual_most_common return str(most_common_character(nums)[0]) diff --git a/vona/utils/roomwithver.py b/vona/utils/roomwithver.py index ea4c27f..82ae2a9 100644 --- a/vona/utils/roomwithver.py +++ b/vona/utils/roomwithver.py @@ -21,6 +21,7 @@ known = { "8": "hx", "9": "iy", "10": "p0", + "11": "jZ", } if desired_ver in known: