import vona.globals as globals 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 = [] event_ids = [ globals.make_event_id(seed=f"1_{room}"), globals.make_event_id(seed=f"2_{room}"), globals.make_event_id(seed=f"3_{room}"), globals.make_event_id(seed=f"4_{room}"), globals.make_event_id(seed=f"5_{room}"), globals.make_event_id(seed=f"6_{room}"), ] create_event = { "content": { "m.federate": True, "creator": f"@vona:{config.server_name}", "room_version": globals.room_version_from_id(room) }, "event_id": event_ids[0], "origin_server_ts": 1, "room_id": room, "sender": f"@vona:{config.server_name}", "state_key": "", "depth": 1, "type": "m.room.create", "auth_events": [], "prev_events": [] } screate_event = globals.hash_and_sign_event(create_event) event_chain.append(screate_event) our_join = { "content": { "displayname": "Vona", "avatar_url": f"mxc://{config.server_name}/cat", "membership": "join" }, "origin_server_ts": 2, "sender": f"@vona:{config.server_name}", "state_key": f"@vona:{config.server_name}", "type": "m.room.member", "event_id": event_ids[1], "room_id": room, "depth": 2, "auth_events": [[ screate_event["event_id"], screate_event["hashes"] ]], "prev_events": [[ screate_event["event_id"], screate_event["hashes"] ]] } sour_join = globals.hash_and_sign_event(our_join) event_chain.append(sour_join) pls = { "content": { "users": { f"@vona:{config.server_name}": "100" } }, "origin_server_ts": 3, "room_id": room, "sender": f"@vona:{config.server_name}", "state_key": "", "type": "m.room.power_levels", "event_id": event_ids[2], "depth": 3, "user_id": f"@vona:{config.server_name}", "auth_events": [ [ screate_event["event_id"], screate_event["hashes"] ], [ sour_join["event_id"], sour_join["hashes"] ] ], "prev_events": [[ sour_join["event_id"], sour_join["hashes"] ]] } spls = globals.hash_and_sign_event(pls) event_chain.append(spls) join_rule = { "content": { "join_rule": "public" }, "origin_server_ts": 4, "sender": f"@vona:{config.server_name}", "state_key": "", "type": "m.room.join_rules", "event_id": event_ids[3], "room_id": room, "depth": 4, "auth_events": [ [ screate_event["event_id"], screate_event["hashes"] ], [ sour_join["event_id"], sour_join["hashes"] ], [ spls["event_id"], spls["hashes"] ] ], "prev_events": [[ spls["event_id"], spls["hashes"] ]] } sjoin_rule = globals.hash_and_sign_event(join_rule) event_chain.append(sjoin_rule) guest_access = { "content": { "guest_access": "forbidden" }, "origin_server_ts": 5, "depth": 5, "sender": f"@vona:{config.server_name}", "state_key": "", "type": "m.room.guest_access", "event_id": event_ids[4], "room_id": room, "auth_events": [ [ screate_event["event_id"], screate_event["hashes"] ], [ sour_join["event_id"], sour_join["hashes"] ], [ spls["event_id"], spls["hashes"] ] ], "prev_events": [[ sjoin_rule["event_id"], sjoin_rule["hashes"] ]] } sguest_access = globals.hash_and_sign_event(guest_access) event_chain.append(sguest_access) history = { "content": { "history_visibility": "shared" }, "type": "m.room.history_visibility", "sender": f"@vona:{config.server_name}", "state_key": "", "origin_server_ts": 6, "depth": 6, "event_id": event_ids[5], "room_id": room, "auth_events": [ [ screate_event["event_id"], screate_event["hashes"] ], [ sour_join["event_id"], sour_join["hashes"] ], [ spls["event_id"], spls["hashes"] ] ], "prev_events": [[ sguest_access["event_id"], sguest_access["hashes"] ]] } shistory = globals.hash_and_sign_event(history) event_chain.append(shistory) remote_join = request.get_json() response = { "auth_chain": event_chain, "event": remote_join, "members_omitted": False, "servers_in_room": [config.server_name], "state": event_chain } return response