]> git.mxchange.org Git - fba.git/blob - api.py
ffdb03e6e1f7bed77fad686bf9280f7a5b6d5a98
[fba.git] / api.py
1 from fastapi import FastAPI
2 import sqlite3
3
4 base_url = ""
5 app = FastAPI(docs_url=base_url+"/docs", redoc_url=base_url+"/redoc")
6
7 @app.get(base_url+"/info")
8 def info():
9     conn = sqlite3.connect("blocks.db")
10     c = conn.cursor()
11     c.execute("select (select count(domain) from instances), (select count(domain) from instances where software in ('pleroma', 'mastodon')), (select count(blocker) from blocks)")
12     known, indexed, blocks = c.fetchone()
13     c.close()
14     return {
15         "known_instances": known,
16         "indexed_instances": indexed,
17         "blocks_recorded": blocks,
18         "source_code": "https://gitlab.com/EnjuAihara/fedi-block-api",
19     }
20
21 @app.get(base_url+"/domain/{domain}")
22 def blocked(domain: str):
23     conn = sqlite3.connect("blocks.db")
24     c = conn.cursor()
25     wildchar = "*." + ".".join(domain.split(".")[-domain.count("."):])
26     c.execute("select blocker, block_level, reason from blocks where blocked = ? or blocked = ?", (domain, wildchar))
27     blocks = c.fetchall()
28     conn.close()
29
30     result = {}
31     reasons = {}
32
33     for domain, block_level, reason in blocks:
34         if block_level in result:
35             result[block_level].append(domain)
36         else:
37             result[block_level] = [domain]
38             
39         if reason != "":
40             if block_level in reasons:
41                 reasons[block_level][domain] = reason
42             else:
43                 reasons[block_level] = {domain: reason}
44
45     return {"blocks": result, "reasons": reasons}
46