summaryrefslogtreecommitdiffstats
path: root/management/endpoints.py
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
    })