diff options
Diffstat (limited to 'management')
| -rw-r--r-- | management/endpoints.py | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/management/endpoints.py b/management/endpoints.py index ef44114..2dc77d4 100644 --- a/management/endpoints.py +++ b/management/endpoints.py | |||
| @@ -18,10 +18,7 @@ management = FastAPI() | |||
| 18 | management.add_middleware(AuthenticationMiddleware, backend=SessionAuthBackend()) | 18 | management.add_middleware(AuthenticationMiddleware, backend=SessionAuthBackend()) |
| 19 | management.add_middleware(SessionMiddleware, secret_key=conf.SECRET_KEY) | 19 | management.add_middleware(SessionMiddleware, secret_key=conf.SECRET_KEY) |
| 20 | 20 | ||
| 21 | templates = Jinja2Templates(directory=[ | 21 | templates = Jinja2Templates(directory=["templates", "management/templates"]) |
| 22 | 'templates', | ||
| 23 | 'management/templates' | ||
| 24 | ]) | ||
| 25 | 22 | ||
| 26 | 23 | ||
| 27 | def requires_session(func): | 24 | def requires_session(func): |
| @@ -29,38 +26,42 @@ def requires_session(func): | |||
| 29 | which resolves the redirect target via `request.url_for()` against whichever router is | 26 | which resolves the redirect target via `request.url_for()` against whichever router is |
| 30 | bound into `request.scope` -- a lookup that only reaches `authentication`'s routes when | 27 | bound into `request.scope` -- a lookup that only reaches `authentication`'s routes when |
| 31 | `management` happens to be mounted under a shared root app.""" | 28 | `management` happens to be mounted under a shared root app.""" |
| 29 | |||
| 32 | @wraps(func) | 30 | @wraps(func) |
| 33 | async def wrapper(request: Request, *args, **kwargs): | 31 | async def wrapper(request: Request, *args, **kwargs): |
| 34 | if not {'authenticated', 'session'}.issubset(request.auth.scopes): | 32 | if not {"authenticated", "session"}.issubset(request.auth.scopes): |
| 35 | next_param = urlencode({'next': str(request.url)}) | 33 | next_param = urlencode({"next": str(request.url)}) |
| 36 | return RedirectResponse(f'/auth/login/?{next_param}', status_code=303) | 34 | return RedirectResponse(f"/auth/login/?{next_param}", status_code=303) |
| 37 | return await func(request, *args, **kwargs) | 35 | return await func(request, *args, **kwargs) |
| 36 | |||
| 38 | return wrapper | 37 | return wrapper |
| 39 | 38 | ||
| 40 | @management.get('/') | 39 | |
| 40 | @management.get("/") | ||
| 41 | async def index(request: Request): | 41 | async def index(request: Request): |
| 42 | with get_session_context() as session: | 42 | with get_session_context() as session: |
| 43 | query = select(func.count(User.id)) | 43 | query = select(func.count(User.id)) |
| 44 | user_count = session.exec(query) | 44 | user_count = session.exec(query) |
| 45 | 45 | ||
| 46 | if user_count.first() == 0: | 46 | if user_count.first() == 0: |
| 47 | return RedirectResponse('/auth/register/?next=/management/dashboard/', status_code=303) | 47 | return RedirectResponse( |
| 48 | "/auth/register/?next=/management/dashboard/", status_code=303 | ||
| 49 | ) | ||
| 48 | 50 | ||
| 49 | return RedirectResponse('/management/dashboard/', status_code=303) | 51 | return RedirectResponse("/management/dashboard/", status_code=303) |
| 50 | 52 | ||
| 51 | 53 | ||
| 52 | @management.get('/dashboard/') | 54 | @management.get("/dashboard/") |
| 53 | @requires_session | 55 | @requires_session |
| 54 | async def dashboard(request: Request): | 56 | async def dashboard(request: Request): |
| 55 | return templates.TemplateResponse(request, 'dashboard.html') | 57 | return templates.TemplateResponse(request, "dashboard.html") |
| 58 | |||
| 56 | 59 | ||
| 57 | @management.get('/users/') | 60 | @management.get("/users/") |
| 58 | @requires_session | 61 | @requires_session |
| 59 | async def users(request: Request): | 62 | async def users(request: Request): |
| 60 | with get_session_context() as session: | 63 | with get_session_context() as session: |
| 61 | query = select(User) | 64 | query = select(User) |
| 62 | users = session.exec(query).all() | 65 | users = session.exec(query).all() |
| 63 | 66 | ||
| 64 | return templates.TemplateResponse(request, 'users.html', context={ | 67 | return templates.TemplateResponse(request, "users.html", context={"users": users}) |
| 65 | 'users': users | ||
| 66 | }) | ||
