Add System Admin tab dashboard v1
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import RedirectResponse
|
||||
|
||||
from app.core.db.common import CommonSessionLocal
|
||||
from app.core.http_responses import ui_access_denied
|
||||
from app.core.security.csrf import get_or_create_csrf_token
|
||||
from app.core.security.session_auth import get_current_user
|
||||
from app.core.templating import templates
|
||||
from app.modules.core.rbac.deps import get_user_permissions, get_user_roles
|
||||
from app.modules.system_admin_dashboard.service import (
|
||||
get_catalogue_summary,
|
||||
get_overview,
|
||||
get_recent_audit_logs,
|
||||
get_report_cards,
|
||||
get_smtp_summary,
|
||||
get_storage_status,
|
||||
get_wizard_cards,
|
||||
is_system_admin,
|
||||
list_firms,
|
||||
)
|
||||
|
||||
router = APIRouter(prefix="/system-admin", tags=["system-admin-dashboard-ui"])
|
||||
|
||||
_ALLOWED_TABS = {
|
||||
"overview",
|
||||
"firms",
|
||||
"catalogue",
|
||||
"smtp",
|
||||
"storage",
|
||||
"reports",
|
||||
"wizards",
|
||||
"audit-logs",
|
||||
}
|
||||
|
||||
|
||||
def _login_redirect() -> RedirectResponse:
|
||||
return RedirectResponse(url="/login", status_code=303)
|
||||
|
||||
|
||||
def _base_context(request: Request, db, current_user, **extra):
|
||||
ctx = {
|
||||
"request": request,
|
||||
"current_user": current_user,
|
||||
"current_user_roles": get_user_roles(db, current_user.id),
|
||||
"current_user_permissions": get_user_permissions(db, current_user.id),
|
||||
"csrf_token": get_or_create_csrf_token(request),
|
||||
}
|
||||
ctx.update(extra)
|
||||
return ctx
|
||||
|
||||
|
||||
def _system_admin_or_response(request: Request, db):
|
||||
current_user = get_current_user(request, db=db)
|
||||
if not current_user:
|
||||
return None, _login_redirect()
|
||||
if not is_system_admin(db, current_user):
|
||||
return None, ui_access_denied()
|
||||
return current_user, None
|
||||
|
||||
|
||||
@router.get("/dashboard")
|
||||
def dashboard(request: Request, tab: str = "overview"):
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
current_user, response = _system_admin_or_response(request, db)
|
||||
if response:
|
||||
return response
|
||||
active_tab = tab if tab in _ALLOWED_TABS else "overview"
|
||||
return templates.TemplateResponse(
|
||||
"modules/system_admin_dashboard/templates/system_admin_dashboard/dashboard.html",
|
||||
_base_context(
|
||||
request,
|
||||
db,
|
||||
current_user,
|
||||
title="System Admin Dashboard",
|
||||
active_tab=active_tab,
|
||||
),
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
@router.get("/dashboard/tab/{tab_name}")
|
||||
def dashboard_tab(request: Request, tab_name: str):
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
current_user, response = _system_admin_or_response(request, db)
|
||||
if response:
|
||||
return response
|
||||
if tab_name not in _ALLOWED_TABS:
|
||||
tab_name = "overview"
|
||||
|
||||
extra = {"active_tab": tab_name}
|
||||
template = f"modules/system_admin_dashboard/templates/system_admin_dashboard/partials/{tab_name.replace('-', '_')}.html"
|
||||
|
||||
if tab_name == "overview":
|
||||
extra["overview"] = get_overview(db)
|
||||
elif tab_name == "firms":
|
||||
extra["firms"] = list_firms(db)
|
||||
elif tab_name == "catalogue":
|
||||
extra["catalogue"] = get_catalogue_summary(db)
|
||||
elif tab_name == "smtp":
|
||||
extra["smtp"] = get_smtp_summary(db)
|
||||
elif tab_name == "storage":
|
||||
extra["storage"] = get_storage_status(db)
|
||||
elif tab_name == "reports":
|
||||
extra["report_cards"] = get_report_cards(db)
|
||||
elif tab_name == "wizards":
|
||||
extra["wizard_cards"] = get_wizard_cards()
|
||||
elif tab_name == "audit-logs":
|
||||
extra["audit_logs"] = get_recent_audit_logs(db)
|
||||
|
||||
return templates.TemplateResponse(template, _base_context(request, db, current_user, **extra))
|
||||
finally:
|
||||
db.close()
|
||||
Reference in New Issue
Block a user