Add Hammerhead endpoints

This commit is contained in:
2025-10-12 23:13:19 -04:00
parent 357d3b7429
commit 4e28507dea
2 changed files with 81 additions and 0 deletions

79
vona/custom/hammerhead.py Normal file
View File

@@ -0,0 +1,79 @@
from flask import Blueprint, request, jsonify
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
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/server-info/<server>")
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/<room>/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
del event["event_id"]
return jsonify({
"current_state": formatted_state,
"event_cache": event_cache,
"room_id": room,
"room_version": globals.room_version_from_id(room)
})