From a7d0638ba0934c89030d6c0ff77450c3f4634e9b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Tue, 14 Jan 2025 01:48:35 +0100 Subject: [PATCH] Continued: - why do I have to add this unreferenced reqto?! --- daemon.py | 41 ++++++++++++++++++++++------------------- fba/commands.py | 1 + 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/daemon.py b/daemon.py index 7120f7b..c3d8946 100755 --- a/daemon.py +++ b/daemon.py @@ -45,7 +45,10 @@ from fba.helpers import tidyup from fba.models import blocks from fba.models import instances -router = fastapi.FastAPI(docs_url=config.get("base_url") + "/docs", redoc_url=config.get("base_url") + "/redoc") +# Base URL for all our own requests +_base_url = config.get("base_url") + +router = fastapi.FastAPI(docs_url=_base_url + "/docs", redoc_url=_base_url + "/redoc") router.mount( "/static", StaticFiles(directory=Path(__file__).parent.absolute() / "static"), @@ -54,7 +57,7 @@ router.mount( templates = Jinja2Templates(directory="templates") -@router.get(config.get("base_url") + "/api/info.json", response_class=JSONResponse) +@router.get(_base_url + "/api/info.json", response_class=JSONResponse) def api_info() -> None: database.cursor.execute("SELECT (SELECT COUNT(domain) FROM instances) AS total_websites, (SELECT COUNT(domain) FROM instances WHERE software IN ('pleroma', 'mastodon', 'lemmy', 'friendica', 'misskey', 'peertube', 'takahe', 'gotosocial', 'brighteon', 'wildebeest', 'bookwyrm', 'mitra', 'areionskey', 'mammuthus', 'neodb', 'smithereen', 'vebinet', 'toki', 'snac', 'biblioreads', 'wordpress', 'oolong', 'diaspora')) AS supported_instances, (SELECT COUNT(blocker) FROM blocks) AS total_blocks, (SELECT COUNT(domain) FROM instances WHERE last_error_details IS NOT NULL) AS erroneous_instances") @@ -68,7 +71,7 @@ def api_info() -> None: }) -@router.get(config.get("base_url") + "/api/scoreboard.json", response_class=JSONResponse) +@router.get(_base_url + "/api/scoreboard.json", response_class=JSONResponse) def api_scoreboard(mode: str, amount: int) -> None: if amount > config.get("api_limit"): raise HTTPException(status_code=400, detail="Too many results") @@ -112,7 +115,7 @@ def api_scoreboard(mode: str, amount: int) -> None: return JSONResponse(status_code=200, content=scores) -@router.get(config.get("base_url") + "/api/list.json", response_class=JSONResponse) +@router.get(_base_url + "/api/list.json", response_class=JSONResponse) def api_list(request: Request, mode: str, value: str, amount: int) -> None: if mode is None or value is None or amount is None: raise HTTPException(status_code=500, detail="No filter specified") @@ -147,7 +150,7 @@ LIMIT ?", [amount] domainlist = database.cursor.fetchall() return domainlist -@router.get(config.get("base_url") + "/api/top.json", response_class=JSONResponse) +@router.get(_base_url + "/api/top.json", response_class=JSONResponse) def api_top(request: Request, mode: str, value: str, amount: int) -> None: if mode is None or value is None or amount is None: raise HTTPException(status_code=500, detail="No filter specified") @@ -234,7 +237,7 @@ LIMIT ?", [ return result -@router.get(config.get("base_url") + "/api/domain.json", response_class=JSONResponse) +@router.get(_base_url + "/api/domain.json", response_class=JSONResponse) def api_domain(domain: str) -> None: if domain is None: raise HTTPException(status_code=400, detail="Invalid request, parameter 'domain' missing") @@ -254,7 +257,7 @@ def api_domain(domain: str) -> None: return JSONResponse(status_code=200, content=dict(domain_data)) -@router.get(config.get("base_url") + "/api/mutual.json", response_class=JSONResponse) +@router.get(_base_url + "/api/mutual.json", response_class=JSONResponse) def api_mutual(domains: list[str] = Query()) -> None: """Return 200 if federation is open between the two, 4xx otherwise""" database.cursor.execute( @@ -277,7 +280,7 @@ def api_mutual(domains: list[str] = Query()) -> None: # No known blocks return JSONResponse(status_code=200, content={}) -@router.get(config.get("base_url") + "/.well-known/nodeinfo", response_class=JSONResponse) +@router.get(_base_url + "/.well-known/nodeinfo", response_class=JSONResponse) def wellknown_nodeinfo(request: Request) -> None: return JSONResponse(status_code=200, content={ "links": ({ @@ -286,7 +289,7 @@ def wellknown_nodeinfo(request: Request) -> None: }) }) -@router.get(config.get("base_url") + "/nodeinfo/1.0", response_class=JSONResponse) +@router.get(_base_url + "/nodeinfo/1.0", response_class=JSONResponse) def nodeinfo_1_0(request: Request) -> None: return JSONResponse(status_code=200, content={ "version": "1.0", @@ -328,7 +331,7 @@ def nodeinfo_1_0(request: Request) -> None: }, }) -@router.get(config.get("base_url") + "/api/v1/instance/domain_blocks", response_class=JSONResponse) +@router.get(_base_url + "/api/v1/instance/domain_blocks", response_class=JSONResponse) def api_domain_blocks(request: Request) -> None: blocked = blacklist.get_all() blocking = [] @@ -343,7 +346,7 @@ def api_domain_blocks(request: Request) -> None: return JSONResponse(status_code=200, content=blocking) -@router.get(config.get("base_url") + "/api/v1/instance/peers", response_class=JSONResponse) +@router.get(_base_url + "/api/v1/instance/peers", response_class=JSONResponse) def api_peers(request: Request) -> None: database.cursor.execute("SELECT domain FROM instances WHERE nodeinfo_url IS NOT NULL") @@ -353,7 +356,7 @@ def api_peers(request: Request) -> None: return JSONResponse(status_code=200, content=peers) -@router.get(config.get("base_url") + "/scoreboard") +@router.get(_base_url + "/scoreboard") def scoreboard(request: Request, mode: str, amount: int) -> None: if mode == "": raise HTTPException(status_code=400, detail="No mode specified") @@ -381,7 +384,7 @@ def scoreboard(request: Request, mode: str, amount: int) -> None: "scores" : json_helper.from_response(response) }) -@router.get(config.get("base_url") + "/list") +@router.get(_base_url + "/list") def list_domains(request: Request, mode: str, value: str, amount: int = config.get("api_limit")) -> None: if mode == "detection_mode" and not instances.valid(value, "detection_mode"): raise HTTPException(status_code=500, detail="Invalid detection mode provided") @@ -410,7 +413,7 @@ def list_domains(request: Request, mode: str, value: str, amount: int = config.g "theme" : config.get("theme"), }) -@router.get(config.get("base_url") + "/top") +@router.get(_base_url + "/top") def top(request: Request, mode: str, value: str, amount: int = config.get("api_limit")) -> None: if mode == "block_level" and not blocks.valid(value, "block_level"): raise HTTPException(status_code=500, detail="Invalid block level provided") @@ -445,7 +448,7 @@ def top(request: Request, mode: str, value: str, amount: int = config.get("api_l "theme" : config.get("theme"), }) -@router.get(config.get("base_url") + "/infos") +@router.get(_base_url + "/infos") def infos(request: Request, domain: str) -> None: if domain is None: raise HTTPException(status_code=400, detail="Invalid request, parameter 'domain' missing") @@ -485,7 +488,7 @@ def infos(request: Request, domain: str) -> None: "slogan" : config.get("slogan"), }) -@router.get(config.get("base_url") + "/rss") +@router.get(_base_url + "/rss") def rss(request: Request, domain: str = None) -> None: if domain is not None: domain = tidyup.domain(domain).encode("idna").decode("utf-8") @@ -535,14 +538,14 @@ LIMIT ?", [config.get("rss_limit")]) "Content-Type": "routerlication/rss+xml" }) -@router.get(config.get("base_url") + "/robots.txt", response_class=PlainTextResponse) +@router.get(_base_url + "/robots.txt", response_class=PlainTextResponse) def robots(request: Request) -> None: return templates.TemplateResponse("views/robots.txt", { "request" : request, - "base_url": config.get("base_url") + "base_url": _base_url }) -@router.get(config.get("base_url") + "/") +@router.get(_base_url + "/") def index(request: Request) -> None: # Get info response = requests.get( diff --git a/fba/commands.py b/fba/commands.py index 3118a63..d6fad6b 100644 --- a/fba/commands.py +++ b/fba/commands.py @@ -27,6 +27,7 @@ import argparse import atoma import bs4 import markdown +import reqto import validators from fba import database -- 2.39.5