import uvicorn
-from fastapi import FastAPI, Request, HTTPException, responses
+from fastapi import FastAPI, Request, HTTPException, responses, Query
import sqlite3
from hashlib import sha256
from fastapi.templating import Jinja2Templates
return templates.TemplateResponse("index.html", {"request": request, "domain": domain, "blocks": blocks, "reason": reason, "reverse": reverse, "info": info})
+@app.get(base_url+"/api/mutual")
+def mutual(domains: list[str] = Query()):
+ """Return 200 if federation is open between the two, 4xx otherwise"""
+ conn = sqlite3.connect('blocks.db')
+ c = conn.cursor()
+ c.execute(
+ "SELECT block_level FROM blocks " \
+ "WHERE ((blocker = :a OR blocker = :b) AND (blocked = :b OR blocked = :a)) " \
+ "AND block_level = 'reject' " \
+ "LIMIT 1",
+ {
+ "a": domains[0],
+ "b": domains[1],
+ },
+ )
+ res = c.fetchone()
+ c.close()
+ if res is not None:
+ # Blocks found
+ return responses.JSONResponse(status_code=418, content={})
+ # No known blocks
+ return responses.JSONResponse(status_code=200, content={})
+
if __name__ == "__main__":
uvicorn.run("api:app", host="127.0.0.1", port=port, log_level="info")
+