blob: 47602d6429b3740f634b656ca4d9397cc194592c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
from fastapi import FastAPI, Request
from sqlalchemy import func
from sqlmodel import select
from starlette.authentication import requires
from starlette.middleware.authentication import AuthenticationMiddleware
from starlette.middleware.sessions import SessionMiddleware
from starlette.responses import RedirectResponse
from starlette.templating import Jinja2Templates
import conf
from authentication.backend import SessionAuthBackend
from db.models import User
from db.session import get_session_context
management = FastAPI()
management.add_middleware(AuthenticationMiddleware, backend=SessionAuthBackend())
management.add_middleware(SessionMiddleware, secret_key=conf.SECRET_KEY)
templates = Jinja2Templates(directory=[
'templates',
'management/templates'
])
@management.get('/')
async def index(request: Request):
with get_session_context() as session:
query = select(func.count(User.id))
user_count = session.exec(query)
if user_count.first() == 0:
return RedirectResponse('/auth/register/?next=/management/dashboard/', status_code=303)
return RedirectResponse('/management/dashboard/', status_code=303)
@management.get('/dashboard/')
@requires(['authenticated', 'session'], redirect='get_login')
async def dashboard(request: Request):
return templates.TemplateResponse(request, 'dashboard.html')
@management.get('/users/')
@requires(['authenticated', 'session'], redirect='get_login')
async def users(request: Request):
with get_session_context() as session:
query = select(User)
users = session.exec(query).all()
return templates.TemplateResponse(request, 'users.html', context={
'users': users
})
|