214 lines
4.1 KiB
Python
214 lines
4.1 KiB
Python
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
|