summaryrefslogtreecommitdiffstats
path: root/management/endpoints.py
diff options
context:
space:
mode:
Diffstat (limited to 'management/endpoints.py')
-rw-r--r--management/endpoints.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/management/endpoints.py b/management/endpoints.py
new file mode 100644
index 0000000..47602d6
--- /dev/null
+++ b/management/endpoints.py
@@ -0,0 +1,50 @@
1from fastapi import FastAPI, Request
2from sqlalchemy import func
3from sqlmodel import select
4from starlette.authentication import requires
5from starlette.middleware.authentication import AuthenticationMiddleware
6from starlette.middleware.sessions import SessionMiddleware
7from starlette.responses import RedirectResponse
8from starlette.templating import Jinja2Templates
9
10import conf
11from authentication.backend import SessionAuthBackend
12from db.models import User
13from db.session import get_session_context
14
15management = FastAPI()
16management.add_middleware(AuthenticationMiddleware, backend=SessionAuthBackend())
17management.add_middleware(SessionMiddleware, secret_key=conf.SECRET_KEY)
18
19templates = Jinja2Templates(directory=[
20 'templates',
21 'management/templates'
22])
23
24@management.get('/')
25async def index(request: Request):
26 with get_session_context() as session:
27 query = select(func.count(User.id))
28 user_count = session.exec(query)
29
30 if user_count.first() == 0:
31 return RedirectResponse('/auth/register/?next=/management/dashboard/', status_code=303)
32
33 return RedirectResponse('/management/dashboard/', status_code=303)
34
35
36@management.get('/dashboard/')
37@requires(['authenticated', 'session'], redirect='get_login')
38async def dashboard(request: Request):
39 return templates.TemplateResponse(request, 'dashboard.html')
40
41@management.get('/users/')
42@requires(['authenticated', 'session'], redirect='get_login')
43async def users(request: Request):
44 with get_session_context() as session:
45 query = select(User)
46 users = session.exec(query).all()
47
48 return templates.TemplateResponse(request, 'users.html', context={
49 'users': users
50 })