X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=api.py;h=4f59c1b8614f6837bf6884f3ab5c64a7b20591f6;hb=2da6daf2ffc5e39c4b555bd8ce030470d6840960;hp=5ba8937f4e990092c67cc6ada82caa0231dba4f6;hpb=34ad7a718cfd8370f978b5a085087f140f1b0a70;p=fba.git diff --git a/api.py b/api.py index 5ba8937..4f59c1b 100644 --- a/api.py +++ b/api.py @@ -14,16 +14,21 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import os +import os.path import re from datetime import datetime from email.utils import format_datetime +from pathlib import Path + +import fastapi from fastapi import Request, HTTPException, Query from fastapi.responses import JSONResponse from fastapi.responses import PlainTextResponse +from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates -import fastapi import uvicorn import requests import validators @@ -39,6 +44,12 @@ from fba.http import network from fba.models import blocks router = fastapi.FastAPI(docs_url=config.get("base_url") + "/docs", redoc_url=config.get("base_url") + "/redoc") +router.mount( + "/static", + StaticFiles(directory=Path(__file__).parent.absolute() / "static"), + name="static", +) + templates = Jinja2Templates(directory="templates") @router.get(config.get("base_url") + "/api/info.json", response_class=JSONResponse) @@ -56,7 +67,7 @@ def api_info(): @router.get(config.get("base_url") + "/api/scoreboard.json", response_class=JSONResponse) def api_scoreboard(mode: str, amount: int): - if amount > 500: + if amount > config.get("api_limit"): raise HTTPException(status_code=400, detail="Too many results") if mode == "blocked": @@ -98,7 +109,7 @@ def api_scoreboard(mode: str, amount: int): def api_index(request: Request, mode: str, value: str, amount: int): if mode is None or value is None or amount is None: raise HTTPException(status_code=500, detail="No filter specified") - elif amount > 500: + elif amount > config.get("api_limit"): raise HTTPException(status_code=500, detail=f"amount={amount} is to big") domain = whildchar = punycode = reason = None @@ -240,6 +251,7 @@ def scoreboard(request: Request, mode: str, amount: int): return templates.TemplateResponse("views/scoreboard.html", { "base_url" : config.get("base_url"), "slogan" : config.get("slogan"), + "theme" : config.get("theme"), "request" : request, "scoreboard": True, "mode" : mode, @@ -257,18 +269,19 @@ def index(request: Request): return templates.TemplateResponse("views/index.html", { "request": request, + "theme" : config.get("theme"), "info" : response.json() }) @router.get(config.get("base_url") + "/top") -def top(request: Request, mode: str, value: str, amount: int = 500): +def top(request: Request, mode: str, value: str, amount: int = config.get("api_limit")): response = requests.get(f"http://{config.get('host')}:{config.get('port')}{config.get('base_url')}/api/info.json") if not response.ok: raise HTTPException(status_code=response.status_code, detail=response.text) elif mode == "" or value == "" or amount == 0: raise HTTPException(status_code=500, detail="Parameter mode, value and amount must always be set") - elif amount > 500: + elif amount > config.get("api_limit"): raise HTTPException(status_code=500, detail=f"amount='{amount}' is to big") info = response.json() @@ -300,6 +313,7 @@ def top(request: Request, mode: str, value: str, amount: int = 500): "found" : found, "blocklist": blocklist, "info" : info, + "theme" : config.get("theme"), }) @router.get(config.get("base_url") + "/rss")