119 lines
2.6 KiB
Python
119 lines
2.6 KiB
Python
import vona.globals as globals
|
|
import vona.config as config
|
|
|
|
import urllib.parse
|
|
import time
|
|
import json
|
|
import httpx
|
|
|
|
|
|
http_client = globals.http_client()
|
|
|
|
versions = [
|
|
"1",
|
|
"2",
|
|
"3",
|
|
"4",
|
|
"5",
|
|
"6",
|
|
"7",
|
|
"8",
|
|
"9",
|
|
"10",
|
|
"11",
|
|
"12",
|
|
"org.matrix.msc3757.10",
|
|
"org.matrix.msc3757.11",
|
|
"org.matrix.hydra.11",
|
|
"org.matrix.msc3667",
|
|
"org.matrix.msc3787",
|
|
"org.matrix.msc4014",
|
|
]
|
|
|
|
verparams = "&".join(f"ver={ver}" for ver in versions)
|
|
|
|
|
|
def get_user_input(prompt):
|
|
try:
|
|
answer = input(prompt)
|
|
while "\\n" in answer:
|
|
answer = answer.replace("\\n", "\n")
|
|
|
|
return urllib.parse.quote(answer)
|
|
except Exception as e:
|
|
print(f"Error reading input: {e}")
|
|
return None
|
|
|
|
|
|
username = get_user_input("Username:\n\t")
|
|
room_id = get_user_input("Room ID:\n\t")
|
|
|
|
|
|
try:
|
|
server_name = input("\nServer name to join via:\n\t")
|
|
except Exception as e:
|
|
print(f"Error reading server names: {e}")
|
|
exit(1)
|
|
|
|
try:
|
|
print("\nSending make_join request..")
|
|
|
|
make_join_response = http_client.get(
|
|
path=f"/_matrix/federation/v1/make_join/{room_id}/%40{username}%3A{config.server_name}?{verparams}",
|
|
destination=server_name,
|
|
)
|
|
|
|
make_join_response.raise_for_status()
|
|
make_join = make_join_response.json()
|
|
|
|
except httpx.HTTPStatusError as e:
|
|
print(f"HTTP error occurred: {e.response.status_code} - {e.response.text}")
|
|
exit(1)
|
|
except json.JSONDecodeError:
|
|
print("Failed to decode response.")
|
|
exit(1)
|
|
except Exception as e:
|
|
print(f"An error occurred: {e}")
|
|
exit(1)
|
|
|
|
|
|
join_event = make_join.get("event", {})
|
|
if make_join.get("room_version", "1") in ["1", "2"]:
|
|
# NOTE: if we always make it opaque than Synapse will 500 lmao
|
|
join_event["event_id"] = globals.make_event_id()
|
|
|
|
elif make_join.get("room_version", "1") == "org.matrix.msc4014":
|
|
# dendrite dislikes this :p
|
|
join_event["sender_key"] = globals.pubkey()
|
|
|
|
join_event["content"]["mxid_mapping"] = globals.sign_json({
|
|
"sender_key": globals.pubkey(),
|
|
"user_id": f"@{username}:{config.server_name}"
|
|
})
|
|
|
|
|
|
timestamp = input("\nTimestamp (leave blank for now):\n\t")
|
|
try:
|
|
join_event["origin_server_ts"] = int(timestamp)
|
|
except ValueError:
|
|
join_event["origin_server_ts"] = int(f"{time.time() * 1000}".split(".")[0])
|
|
|
|
signed_join = globals.hash_and_sign_event(join_event)
|
|
|
|
try:
|
|
send_join_response = http_client.put(
|
|
path=f"/_matrix/federation/v2/send_join/{room_id}/%24doesntmatter?omit_members=true",
|
|
json=signed_join,
|
|
destination=server_name,
|
|
)
|
|
|
|
send_join_response.raise_for_status()
|
|
|
|
print("\nSuccess :)")
|
|
except httpx.HTTPStatusError as e:
|
|
print(
|
|
f"HTTP error occurred during send_join: {e.response.status_code} - {e.response.text}"
|
|
)
|
|
except Exception as e:
|
|
print(f"An error occurred during send_join: {e}")
|