diff --git a/Dockerfile b/Dockerfile index 6d9da36..32e9f33 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,9 +40,19 @@ ENV DATABASE_PATH=/data/kleiderboerse.sqlite \ UPLOAD_PATH=/uploads \ PYTHONUNBUFFERED=1 +# Versionsangabe für die Fusszeile. Die CI reicht Tag und Commit durch; +# lokal bleiben beide leer und es erscheint der Build-Zeitpunkt - der +# ändert sich bei jedem Neubau und zeigt so, ob der neue Stand läuft. +ARG APP_VERSION="" +ARG APP_REVISION="" +ENV APP_VERSION="$APP_VERSION" \ + APP_REVISION="$APP_REVISION" + # Nicht als root laufen. Die beiden Verzeichnisse gehören dem Dienstbenutzer, # der Code dagegen root - so kann der Webdienst seinen eigenen Code nicht # überschreiben. +RUN date -u '+%d.%m.%Y %H:%M UTC' > /app/build.txt + RUN useradd --system --create-home --shell /usr/sbin/nologin kleider \ && mkdir -p /data /uploads \ && chown kleider:kleider /data /uploads diff --git a/app/routers/pages.py b/app/routers/pages.py index e207525..b6bef90 100644 --- a/app/routers/pages.py +++ b/app/routers/pages.py @@ -21,6 +21,7 @@ from app.config import einstellungen from app.database import get_db from app.models import Item, Status from app.schemas import ItemAendern, ItemAnlegen +from app.version import version_info router = APIRouter(include_in_schema=False) @@ -63,6 +64,7 @@ def _umgebung(request: Request, db: Session, **extra) -> dict: "zustand_text": lambda w: ZUSTAND_TEXT.get(w, w), "saison_text": lambda w: SAISON_TEXT.get(w, w), "groesse_text": _groesse_text, + "version": version_info(), "meldung": request.query_params.get("meldung"), "meldung_art": request.query_params.get("art", "ok"), **extra, diff --git a/app/static/theme.js b/app/static/theme.js new file mode 100644 index 0000000..431bb79 --- /dev/null +++ b/app/static/theme.js @@ -0,0 +1,50 @@ +/* Hell/Dunkel umschalten. + * + * Diese Datei wird im OHNE defer eingebunden. Das ist Absicht: sie + * muss laufen, bevor der Seiteninhalt gezeichnet wird, sonst blitzt beim + * Laden kurz die helle Fassung auf, obwohl dunkel eingestellt ist. + * + * Eine eigene Datei statt eines {# Lokal ausgeliefert, nicht vom CDN: die CSP erlaubt nur script-src - 'self', und ein CDN-Aufruf gäbe zudem die IP jedes Besuchers weiter. #} + 'self', und ein CDN-Aufruf gäbe die IP jedes Besuchers weiter. #} - + -
+
- Kleider-Börse + + Kleider-Börse
@@ -40,14 +54,17 @@
{% if meldung %}

{{ meldung }}

+ {{ 'bg-emerald-100 text-emerald-900 dark:bg-emerald-900 dark:text-emerald-100' + if meldung_art == 'ok' + else 'bg-rose-100 text-rose-900 dark:bg-rose-900 dark:text-rose-100' }}"> + {{ meldung }}

{% endif %} {% block inhalt %}{% endblock %}
-