fix: pass authenticated status to all pages via _ctx helper

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Christian Mueller 2026-04-23 21:58:27 +02:00
parent 1bf42250b4
commit 4e659000f7

40
app.py
View File

@ -51,6 +51,12 @@ app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates") templates = Jinja2Templates(directory="templates")
def _ctx(request, page, **kwargs):
"""Build template context with common variables."""
authenticated = scheduler.graph is not None and scheduler.graph.is_authenticated()
return request, f"{page}.html", {"page": page, "authenticated": authenticated, **kwargs}
# ── Dashboard ────────────────────────────────────────────────────────────── # ── Dashboard ──────────────────────────────────────────────────────────────
@app.get("/", response_class=HTMLResponse) @app.get("/", response_class=HTMLResponse)
@ -108,11 +114,7 @@ async def dashboard(request: Request):
}) })
conn.close() conn.close()
authenticated = scheduler.graph is not None and scheduler.graph.is_authenticated() return templates.TemplateResponse(*_ctx(request, "dashboard", devices=device_data))
return templates.TemplateResponse(request, "dashboard.html", {
"page": "dashboard",
"devices": device_data, "authenticated": authenticated,
})
# ── Users ────────────────────────────────────────────────────────────────── # ── Users ──────────────────────────────────────────────────────────────────
@ -126,9 +128,7 @@ async def users_page(request: Request):
ORDER BY u.active DESC, u.display_name ORDER BY u.active DESC, u.display_name
""").fetchall() """).fetchall()
conn.close() conn.close()
return templates.TemplateResponse(request, "users.html", { return templates.TemplateResponse(*_ctx(request, "users", users=users))
"page": "users", "users": users,
})
@app.post("/api/users/sync") @app.post("/api/users/sync")
@ -196,9 +196,7 @@ async def devices_page(request: Request):
"SELECT * FROM wled_devices ORDER BY name, hostname" "SELECT * FROM wled_devices ORDER BY name, hostname"
).fetchall() ).fetchall()
conn.close() conn.close()
return templates.TemplateResponse(request, "devices.html", { return templates.TemplateResponse(*_ctx(request, "devices", devices=devices))
"page": "devices", "devices": devices,
})
@app.post("/api/devices") @app.post("/api/devices")
@ -276,10 +274,8 @@ async def assignments_page(request: Request):
).fetchall() ).fetchall()
conn.close() conn.close()
return templates.TemplateResponse(request, "assignments.html", { return templates.TemplateResponse(*_ctx(request, "assignments",
"page": "assignments", assignments=assignments, users=users, devices=devices))
"assignments": assignments, "users": users, "devices": devices,
})
@app.post("/api/assignments") @app.post("/api/assignments")
@ -316,9 +312,7 @@ async def colors_page(request: Request):
conn = database.get_db() conn = database.get_db()
rules = conn.execute("SELECT * FROM color_rules ORDER BY status").fetchall() rules = conn.execute("SELECT * FROM color_rules ORDER BY status").fetchall()
conn.close() conn.close()
return templates.TemplateResponse(request, "colors.html", { return templates.TemplateResponse(*_ctx(request, "colors", rules=rules))
"page": "colors", "rules": rules,
})
@app.post("/api/colors") @app.post("/api/colors")
@ -372,11 +366,7 @@ async def add_color(
@app.get("/settings", response_class=HTMLResponse) @app.get("/settings", response_class=HTMLResponse)
async def settings_page(request: Request): async def settings_page(request: Request):
settings = database.get_all_settings() settings = database.get_all_settings()
authenticated = scheduler.graph is not None and scheduler.graph.is_authenticated() return templates.TemplateResponse(*_ctx(request, "settings", settings=settings))
return templates.TemplateResponse(request, "settings.html", {
"page": "settings",
"settings": settings, "authenticated": authenticated,
})
@app.post("/api/settings") @app.post("/api/settings")
@ -412,9 +402,7 @@ async def log_page(request: Request):
"SELECT * FROM activity_log ORDER BY id DESC LIMIT 200" "SELECT * FROM activity_log ORDER BY id DESC LIMIT 200"
).fetchall() ).fetchall()
conn.close() conn.close()
return templates.TemplateResponse(request, "log.html", { return templates.TemplateResponse(*_ctx(request, "log", logs=logs))
"page": "log", "logs": logs,
})
# ── API Status (for dashboard auto-refresh) ─────────────────────────────── # ── API Status (for dashboard auto-refresh) ───────────────────────────────