diff --git a/fachschaftslogo.png b/fachschaftslogo.png new file mode 100644 index 0000000..921ff89 Binary files /dev/null and b/fachschaftslogo.png differ diff --git a/main.py b/main.py index d1b7947..2c71518 100644 --- a/main.py +++ b/main.py @@ -14,6 +14,8 @@ import uvicorn from sqlalchemy.orm import Session +ADMIN_GROUP = "Fachschaft Admins" + app = FastAPI() app.add_middleware(SessionMiddleware, secret_key="my_secret_key") app.include_router(oidc.router) @@ -32,7 +34,7 @@ def home(request: Request, user: User = Depends(get_current_user), db: Session = if not db_user: raise HTTPException(status_code=404, detail="User nicht gefunden") users = None - if "Fachschaft Admins" in user["groups"]: + if ADMIN_GROUP in user["groups"]: users = db.query(User).all() return templates.TemplateResponse("index.html", {"request": request, "user": user, "users": users, "db_user": db_user}) @@ -42,7 +44,7 @@ def login_form(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"]: + if not user or ADMIN_GROUP 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: @@ -53,7 +55,7 @@ def set_money(request: Request, username: str = Form(...), money: float = Form(. @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"]: + if not user or ADMIN_GROUP 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: @@ -62,5 +64,20 @@ def drink(request: Request, db: Session = Depends(get_db), user: User = Depends( db.commit() return RedirectResponse(url="/", status_code=303) +@app.post("/payup") +def payup(request: Request, username: str = Form(...), money: float = Form(...), db: Session = Depends(get_db), user: User = Depends(get_current_user)): + if not user or ADMIN_GROUP 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 + current_user = db.query(User).filter_by(username=user["preferred_username"]).first() + if not current_user: + raise HTTPException(status_code=404, detail="Aktueller User nicht gefunden") + current_user.money -= money*100 + db.commit() + return RedirectResponse(url="/", status_code=303) + if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/static/style.css b/static/style.css index 41c05a1..58539ff 100644 --- a/static/style.css +++ b/static/style.css @@ -9,3 +9,38 @@ header { padding: 1em; margin-bottom: 1em; } + +:root { + --goetheblau: rgb(0, 97, 143); + --purple: rgb(134, 0, 71); + --emorot: rgb(179, 6, 44); + --hellgrau: rgb(248, 246, 245); +} + +@media (prefers-color-scheme: dark) { + :root { + --goetheblau: rgb(139, 207, 238); + --purple: rgb(228, 96, 164); + --emorot: rgb(179, 6, 44); + --hellgrau: rgb(77, 75, 70); /* eig. Dunkelgrau */ + } + body { + background: #181a1b; + color: #e0e0e0; + } + header { + background-color: #23272a; + } + main { + background: #23272a; + } + table { + background: #23272a; + color: #e0e0e0; + } + input, select, button { + background: #23272a; + color: #e0e0e0; + border-color: #444; + } +} diff --git a/templates/base.html b/templates/base.html index 7ca5eb0..be0262c 100644 --- a/templates/base.html +++ b/templates/base.html @@ -2,12 +2,13 @@ - {% block title %}Meine Seite{% endblock %} + {% block title %}Getränkeliste{% endblock %}
-

Meine Beispielseite

+ Logo +

Getränkeliste

{% if user %}

Angemeldet als {{ user.preferred_username }}{% if 'Fachschaft Admins' in user.groups %} (Admin){% endif %} – Logout

{% endif %} @@ -20,20 +21,51 @@ {% endif %} {% if 'Fachschaft Admins' in user.groups %}

Admin Interface

-

Users in database:

- - -

Set user money:

-
- - - -
- {% endif %} +

Ausgleichszahlung:

+

Der eingegebene Betrag wird vom aktuell eingeloggten Nutzer abgezogen und dem eingetragenem Nutzer gutgeschrieben.

+
+ + + + + +
+

Users in database:

+ + + + + + + + + + {% for db_user in users %} + + + + + + {% endfor %} + +
UsernameRoleMoney (€)
{{ db_user.username }}{{ db_user.role }}{{ db_user.money / 100 }}
+

Set user money:

+
+ + + + + +
+ {% endif %} {% endif %} diff --git a/templates/index.html b/templates/index.html index 813cfa7..b8c7222 100644 --- a/templates/index.html +++ b/templates/index.html @@ -3,12 +3,37 @@ {% block content %}

Willkommen, {{ user.name }}!

Dies ist eine einfache geschützte Seite.

-

Aktueller Stand:

-

Du hast {{ db_user.money / 100 }} Euro.

+

Aktueller Kontostand:

+{% if db_user.money > -5000 %} +
+ {{ db_user.money / 100 }} Euro +
+{% else %} +
+ {{ db_user.money / 100 }} Euro +
+ + Bitte begleiche deinen offenen Betrag! + +
+{% endif %} {% if 'Fachschaft' in user.groups %} -

Getränk abziehen

-
- -
+ {% if db_user.money > -5000 %} +
+
+ +
+ + {% else %} +
+
+ +
+ + {% endif %} {% endif %} {% endblock %} diff --git a/templates/login.html b/templates/login.html index a6d25b2..6730f2e 100644 --- a/templates/login.html +++ b/templates/login.html @@ -4,9 +4,13 @@

Login

-
- -
+
+
+ +
+