]> git.mxchange.org Git - fba.git/blobdiff - api.py
Add api endpoint to test if there are blocks between two domains. Added an index...
[fba.git] / api.py
diff --git a/api.py b/api.py
index f2742ed6cea32e0d2b96f2e877ef897fa64d897c..43086fde79d45330ee6921a13fb435ed292f61dc 100644 (file)
--- a/api.py
+++ b/api.py
@@ -1,5 +1,5 @@
 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
@@ -129,5 +129,29 @@ def index(request: Request, domain: str = None, reason: str = None, reverse: str
 
     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")
+