]> git.mxchange.org Git - fba.git/commitdiff
Add api endpoint to test if there are blocks between two domains. Added an index...
authorpwm <pwm@crlf.ninja>
Sun, 26 Feb 2023 21:23:35 +0000 (15:23 -0600)
committerMint <>
Sun, 26 Feb 2023 21:45:58 +0000 (00:45 +0300)
api.py
blocks_empty.db

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")
+
index 6ebc131a7ef956a28f0fbd19884aaafca7649b6c..f8234800b604d6d56272c4a21868c243af881a1a 100644 (file)
Binary files a/blocks_empty.db and b/blocks_empty.db differ