from vona.config import the_funny_number from datetime import datetime, timezone from vona.federation import send_join import vona.globals as globals import vona.config as config import time from flask import ( Blueprint, request, jsonify, ) hammerhead = Blueprint("hammerhead", __name__) # Hammerhead endpoints. Not documented, but code is at: # https://codeberg.org/timedout/hammerhead/src/branch/dev/hammerhead/router/routes/hammerhead @hammerhead.route("/_hammerhead/uptime") async def uptime(): return jsonify({"started_at": config.the_funny_number}) @hammerhead.route("/_hammerhead/version") async def version(): return jsonify({"version": globals.version}) @hammerhead.route("/_hammerhead/admin/reload-config") async def reload_config(): return jsonify({}) @hammerhead.route("/_hammerhead/admin/server-info/") async def server_info(server): return jsonify({ "destination": { "expires": datetime.now(timezone.utc).isoformat(), "host_header": server, "ip_port": [ f"{server}:443" ], "server_name": server }, "keys": globals.sign_json({ "old_verify_keys": {}, "server_name": server, "valid_until_ts": int(time.time() * 1000 + 604800000), "verify_keys": { f"ed25519:{config.signing_key.split()[1]}": { "key": globals.pubkey() } } }), "software": { "server": { "version": globals.version, "name": "Vona" } } }) @hammerhead.route("/_hammerhead/admin/rooms//state-resolver") async def room_state(room): class bullshit: def get_json(): return {} state = send_join(bullshit, room)["state"] formatted_state = {} event_cache = {} for event in state: key = f"({event["type"]},'{event["state_key"]}')" formatted_state[key] = event event_id = event["event_id"] event_cache[event_id] = event return jsonify({ "current_state": formatted_state, "event_cache": event_cache, "room_id": room, "room_version": globals.room_version_from_id(room) })