Adding the new rewrite
This commit is contained in:
1 parent
4aca9f08d1
commit
9b48b01d1d
62 files changed
+4510
-1406
No files matched your search
@@ -0,0 +1,118 @@
|
||||
"""HTML page routes (dashboard, config, login, setup, events, alerts, settings)."""
|
||||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from fastapi.templating import Jinja2Templates
|
||||
|
||||
from ..auth import CSRF_COOKIE, current_user, is_admin_configured, make_csrf_token
|
||||
from ..config import load_config
|
||||
|
||||
router = APIRouter()
|
||||
templates = Jinja2Templates(directory="app/templates")
|
||||
|
||||
|
||||
def _ensure_csrf(request: Request, response):
|
||||
token = request.cookies.get(CSRF_COOKIE)
|
||||
if not token:
|
||||
token = make_csrf_token()
|
||||
response.set_cookie(
|
||||
CSRF_COOKIE, token, httponly=False, samesite="lax", path="/"
|
||||
)
|
||||
return token
|
||||
|
||||
|
||||
def _session_or_setup_redirect(request: Request):
|
||||
if not is_admin_configured():
|
||||
return RedirectResponse("/setup", status_code=302)
|
||||
user = current_user(request)
|
||||
if not user:
|
||||
return RedirectResponse("/login", status_code=302)
|
||||
return None
|
||||
|
||||
|
||||
@router.get("/", response_class=HTMLResponse)
|
||||
async def dashboard(request: Request):
|
||||
redirect = _session_or_setup_redirect(request)
|
||||
if redirect:
|
||||
return redirect
|
||||
cfg = load_config()
|
||||
user = current_user(request)
|
||||
response = templates.TemplateResponse(
|
||||
"dashboard.html",
|
||||
{
|
||||
"request": request,
|
||||
"ups_list": cfg.ups,
|
||||
"ui_cfg": cfg.ui.model_dump(),
|
||||
"current_user": user,
|
||||
"active_nav": "dashboard",
|
||||
},
|
||||
)
|
||||
_ensure_csrf(request, response)
|
||||
return response
|
||||
|
||||
|
||||
@router.get("/config", response_class=HTMLResponse)
|
||||
async def config_page(request: Request):
|
||||
redirect = _session_or_setup_redirect(request)
|
||||
if redirect:
|
||||
return redirect
|
||||
response = templates.TemplateResponse(
|
||||
"config.html",
|
||||
{"request": request, "current_user": current_user(request), "active_nav": "config"},
|
||||
)
|
||||
_ensure_csrf(request, response)
|
||||
return response
|
||||
|
||||
|
||||
@router.get("/events", response_class=HTMLResponse)
|
||||
async def events_page(request: Request):
|
||||
redirect = _session_or_setup_redirect(request)
|
||||
if redirect:
|
||||
return redirect
|
||||
response = templates.TemplateResponse(
|
||||
"events.html",
|
||||
{"request": request, "current_user": current_user(request), "active_nav": "events"},
|
||||
)
|
||||
_ensure_csrf(request, response)
|
||||
return response
|
||||
|
||||
|
||||
@router.get("/alerts", response_class=HTMLResponse)
|
||||
async def alerts_page(request: Request):
|
||||
redirect = _session_or_setup_redirect(request)
|
||||
if redirect:
|
||||
return redirect
|
||||
response = templates.TemplateResponse(
|
||||
"alerts.html",
|
||||
{"request": request, "current_user": current_user(request), "active_nav": "alerts"},
|
||||
)
|
||||
_ensure_csrf(request, response)
|
||||
return response
|
||||
|
||||
|
||||
@router.get("/settings", response_class=HTMLResponse)
|
||||
async def settings_page(request: Request):
|
||||
redirect = _session_or_setup_redirect(request)
|
||||
if redirect:
|
||||
return redirect
|
||||
response = templates.TemplateResponse(
|
||||
"settings.html",
|
||||
{"request": request, "current_user": current_user(request), "active_nav": "settings"},
|
||||
)
|
||||
_ensure_csrf(request, response)
|
||||
return response
|
||||
|
||||
|
||||
@router.get("/login", response_class=HTMLResponse)
|
||||
async def login_page(request: Request):
|
||||
if not is_admin_configured():
|
||||
return RedirectResponse("/setup", status_code=302)
|
||||
if current_user(request):
|
||||
return RedirectResponse("/", status_code=302)
|
||||
return templates.TemplateResponse("login.html", {"request": request})
|
||||
|
||||
|
||||
@router.get("/setup", response_class=HTMLResponse)
|
||||
async def setup_page(request: Request):
|
||||
if is_admin_configured():
|
||||
return RedirectResponse("/login", status_code=302)
|
||||
return templates.TemplateResponse("setup.html", {"request": request})
|
||||
Reference in new issue
Block a user