]> git.mxchange.org Git - fba.git/blobdiff - api.py
Continued:
[fba.git] / api.py
diff --git a/api.py b/api.py
index 5ba8937f4e990092c67cc6ada82caa0231dba4f6..4f59c1b8614f6837bf6884f3ab5c64a7b20591f6 100644 (file)
--- a/api.py
+++ b/api.py
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
+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")