#!/usr/bin/env python3 from nicegui import app, ui from auth.login import router as login_router from auth.logout import logout from auth.mw import AuthMiddleware from auth.secret import get_secret app.include_router(login_router) app.add_middleware(AuthMiddleware) @ui.page("/") def main_page(): with ui.column().classes("absolute-center items-center"): username = app.storage.user.get("username", "unknown user") ui.label(f"Hello {username}!").classes("text-2xl") ui.button("log out", icon="logout", on_click=logout) pgroups = app.storage.user.get("pgroups", set()) ui.select( label="pgroup", options=sorted(pgroups), with_input=True, on_change=lambda e: ui.navigate.to(e.value) ) #TODO: the below is a dummy from typing import Annotated from fastapi import Path PGroup = Annotated[str, Path(pattern=r"^p\d{5}$")] @ui.page("/{pgroup}") def table(pgroup: PGroup): pgroups = app.storage.user.get("pgroups", set()) if pgroup in pgroups: table_show(pgroup) else: table_deny(pgroup) def table_show(pgroup): with ui.column().classes("absolute-center items-center gap-8"): ui.icon("sym_o_thumb_up", size="xl") ui.label(f"{pgroup} erlaubt!").classes("text-2xl") def table_deny(pgroup): with ui.column().classes("absolute-center items-center gap-8"): ui.icon("sym_o_front_hand", size="xl") ui.label(f"{pgroup} verboten!").classes("text-2xl") ui.run(storage_secret=get_secret(), dark=True)