More database handling and admin interface

This commit is contained in:
2025-05-13 15:51:25 +02:00
parent d1adfe9f93
commit 1693a56e43
7 changed files with 97 additions and 97 deletions

40
main.py
View File

@@ -4,18 +4,18 @@ from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from starlette.middleware.sessions import SessionMiddleware
from db.models import Base, engine, SessionLocal, get_db, User
from db.models import Base, engine, get_db, User
from auth.session import get_current_user, login_user, logout_user
from auth.session import get_current_user
from auth import webauthn, oidc
from auth import oidc
import uvicorn
from sqlalchemy.orm import Session
app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key="my_secret_key")
app.include_router(webauthn.router)
app.include_router(oidc.router)
app.mount("/static", StaticFiles(directory="static"), name="static")
@@ -25,14 +25,42 @@ templates = Jinja2Templates(directory="templates")
Base.metadata.create_all(bind=engine)
@app.get("/", response_class=HTMLResponse)
def home(request: Request, user: User = Depends(get_current_user)):
def home(request: Request, user: User = Depends(get_current_user), db: Session = Depends(get_db)):
if not user:
return RedirectResponse(url="/login", status_code=303)
return templates.TemplateResponse("index.html", {"request": request, "user": user})
db_user = db.query(User).filter_by(username=user["preferred_username"]).first()
if not db_user:
raise HTTPException(status_code=404, detail="User nicht gefunden")
users = None
if "Fachschaft Admins" in user["groups"]:
users = db.query(User).all()
return templates.TemplateResponse("index.html", {"request": request, "user": user, "users": users, "db_user": db_user})
@app.get("/login", response_class=HTMLResponse)
def login_form(request: Request):
return templates.TemplateResponse("login.html", {"request": request})
@app.post("/set_money")
def set_money(request: Request, username: str = Form(...), money: float = Form(...), db: Session = Depends(get_db), user: User = Depends(get_current_user)):
if not user or "Fachschaft Admins" not in user["groups"]:
raise HTTPException(status_code=403, detail="Nicht erlaubt")
db_user = db.query(User).filter_by(username=username).first()
if not db_user:
raise HTTPException(status_code=404, detail="User nicht gefunden")
db_user.money = money*100
db.commit()
return RedirectResponse(url="/", status_code=303)
@app.post("/drink")
def drink(request: Request, db: Session = Depends(get_db), user: User = Depends(get_current_user)):
if not user or "Fachschaft" not in user["groups"]:
raise HTTPException(status_code=403, detail="Nicht erlaubt")
db_user = db.query(User).filter_by(username=user["preferred_username"]).first()
if not db_user:
raise HTTPException(status_code=404, detail="User nicht gefunden")
db_user.money -= 100
db.commit()
return RedirectResponse(url="/", status_code=303)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)