Implement rooms V3 through V9
This commit is contained in:
@@ -3,9 +3,6 @@ import vona.config as config
|
||||
|
||||
# This file is responsible for creating Matrix rooms.
|
||||
|
||||
# Room V3+
|
||||
# TODO
|
||||
|
||||
# Room V1/V2
|
||||
def v1_v2(request, room) -> dict:
|
||||
event_chain = []
|
||||
@@ -211,3 +208,77 @@ def v1_v2(request, room) -> dict:
|
||||
}
|
||||
|
||||
return response
|
||||
|
||||
|
||||
# Room V3 to V9
|
||||
def v3(request, room) -> dict:
|
||||
initial_response = v1_v2(request, room)
|
||||
state = list(initial_response["state"])
|
||||
ver = int(globals.room_version_from_id(room))
|
||||
events = {}
|
||||
hash_map = {}
|
||||
|
||||
for event in state:
|
||||
events[event["type"]] = event
|
||||
del event["event_id"]
|
||||
del event["hashes"]
|
||||
del event["signatures"]
|
||||
|
||||
# m.room.create doesn't have prev_events or auth_events
|
||||
events["m.room.create"] = globals.hash_and_sign_event(events["m.room.create"])
|
||||
hash_map["m.room.create"] = globals.make_ref_hash(events["m.room.create"], ver)
|
||||
|
||||
events["m.room.member"]["auth_events"] = [hash_map["m.room.create"]]
|
||||
events["m.room.member"]["prev_events"] = [hash_map["m.room.create"]]
|
||||
events["m.room.member"] = globals.hash_and_sign_event(events["m.room.member"])
|
||||
hash_map["m.room.member"] = globals.make_ref_hash(events["m.room.member"], ver)
|
||||
|
||||
events["m.room.power_levels"]["auth_events"] = [
|
||||
hash_map["m.room.create"],
|
||||
hash_map["m.room.member"],
|
||||
]
|
||||
events["m.room.power_levels"]["prev_events"] = [hash_map["m.room.member"]]
|
||||
events["m.room.power_levels"] = globals.hash_and_sign_event(events["m.room.power_levels"])
|
||||
hash_map["m.room.power_levels"] = globals.make_ref_hash(events["m.room.power_levels"], ver)
|
||||
|
||||
events["m.room.join_rules"]["auth_events"] = [
|
||||
hash_map["m.room.create"],
|
||||
hash_map["m.room.member"],
|
||||
hash_map["m.room.power_levels"],
|
||||
]
|
||||
events["m.room.join_rules"]["prev_events"] = [hash_map["m.room.power_levels"]]
|
||||
events["m.room.join_rules"] = globals.hash_and_sign_event(events["m.room.join_rules"])
|
||||
hash_map["m.room.join_rules"] = globals.make_ref_hash(events["m.room.join_rules"], ver)
|
||||
|
||||
events["m.room.guest_access"]["auth_events"] = [
|
||||
hash_map["m.room.create"],
|
||||
hash_map["m.room.member"],
|
||||
hash_map["m.room.power_levels"],
|
||||
]
|
||||
events["m.room.guest_access"]["prev_events"] = [hash_map["m.room.join_rules"]]
|
||||
events["m.room.guest_access"] = globals.hash_and_sign_event(events["m.room.guest_access"])
|
||||
hash_map["m.room.guest_access"] = globals.make_ref_hash(events["m.room.guest_access"], ver)
|
||||
|
||||
events["m.room.history_visibility"]["auth_events"] = [
|
||||
hash_map["m.room.create"],
|
||||
hash_map["m.room.member"],
|
||||
hash_map["m.room.power_levels"],
|
||||
]
|
||||
events["m.room.history_visibility"]["prev_events"] = [hash_map["m.room.guest_access"]]
|
||||
events["m.room.history_visibility"] = globals.hash_and_sign_event(events["m.room.history_visibility"])
|
||||
|
||||
new_state = []
|
||||
|
||||
for event in events:
|
||||
new_state.append(events[event])
|
||||
|
||||
|
||||
resp = {
|
||||
"auth_chain": new_state,
|
||||
"event": initial_response["event"],
|
||||
"members_omitted": False,
|
||||
"servers_in_room": [config.server_name],
|
||||
"state": new_state
|
||||
}
|
||||
|
||||
return resp
|
||||
|
||||
Reference in New Issue
Block a user