From 5ee32751122326f78a681a081ae39b844211177c Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Sat, 22 Aug 2026 12:02:16 +0200 Subject: [PATCH] fix: Betriebsskripte fehlten im Docker-Abbild Das Verzeichnis scripts/ wurde beim Bauen nie in die Laufzeitstufe uebernommen. Der in der Anleitung dokumentierte Befehl docker compose exec app node scripts/totp-geheimnis.mjs ... endete deshalb mit "Cannot find module". Betroffen war nicht nur dieses eine Skript, sondern alle, die im laufenden Behaelter gedacht sind - auch wartungsschluessel.mjs und schluessel-erzeugen.mjs. Kopiert wird jetzt das ganze Verzeichnis, nicht einzelne Dateien. Sonst faellt beim naechsten Betriebsskript wieder auf, dass es fehlt - und zwar erst dann, wenn man es braucht. Die Entwicklungsskripte darin laufen dort mangels Werkzeugen nicht, kosten aber nur ein paar Kilobyte. Geprueft im fertigen Abbild und gegen eine echte Datenbank: Das Skript liegt unter /app/scripts, laeuft als Benutzer cockpit und gibt dasselbe Geheimnis aus wie auf dem Entwicklungsrechner. Die Anleitung nennt jetzt zusaetzlich den Weg fuer alle, die noch eine aeltere Fassung laufen haben und nicht sofort aktualisieren wollen: docker compose cp legt die Datei einmalig in den Behaelter. Etappe: 8 Phase: Haertung --- CHANGELOG.md | 34 +++++++++++++++++++++++++++++++++- Dockerfile | 11 +++++++++++ docs/ANLEITUNG.md | 8 ++++++++ package.json | 2 +- src/lib/version.ts | 2 +- 5 files changed, 54 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f8e6a8..243c309 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,37 @@ Wiederherstellung*. _Noch nichts._ +## [1.0.1] – 2026-08-22 + +### Behoben + +- **Betriebsskripte fehlten im Docker-Abbild.** Das Verzeichnis `scripts/` + wurde beim Bauen nie in die Laufzeitstufe übernommen. `docker compose + exec app node scripts/totp-geheimnis.mjs …` endete deshalb mit + `Cannot find module`. Betroffen waren alle Skripte, die im laufenden + Behälter gedacht sind — auch `wartungsschluessel.mjs` und + `schluessel-erzeugen.mjs`. + + Nach dem Update funktioniert der Befehl wie dokumentiert. Wer nicht + gleich aktualisieren will, kommt einmalig auch so an das Skript: + + ```bash + docker compose cp scripts/totp-geheimnis.mjs app:/app/totp-geheimnis.mjs + docker compose exec app node totp-geheimnis.mjs deine@adresse.de + ``` + +### Hinzugefügt + +- **`scripts/totp-geheimnis.mjs`** — liest das TOTP-Geheimnis eines Zugangs + aus, um denselben Zugang auf einem zweiten Gerät einzurichten (Handy und + Tablet, oder ein Ersatzgerät). Die Anwendung zeigt das Geheimnis sonst + nur einmal an, beim Einrichten; bisher blieb nur, den zweiten Faktor + zurückzusetzen und alle Wiederherstellungscodes neu zu erzeugen. + + Das Skript läuft nur auf dem Server und nur mit Zugriff auf die Datenbank + **und** auf `ENC_KEY_V1`. Wer beides hat, kann ohnehin alles lesen — es + ist also keine Hintertür, sondern erspart eine unnötige Neueinrichtung. + ## [1.0.0] – 2026-08-22 Erste vollständige Fassung. Alle acht Etappen umgesetzt, alle @@ -188,5 +219,6 @@ Was davon wann angegangen wird, steht in [`docs/ROADMAP.md`](docs/ROADMAP.md). --- -[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.0.0...HEAD +[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.0.1...HEAD +[1.0.1]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/compare/v1.0.0...v1.0.1 [1.0.0]: https://git.wilde-server.de/florian.wilde/betreuungs-cockpit/releases/tag/v1.0.0 diff --git a/Dockerfile b/Dockerfile index 0cf5ab2..d5b08ae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -95,6 +95,17 @@ COPY --from=bau --chown=cockpit:cockpit /app/node_modules/.prisma ./node_modules COPY --from=bau --chown=cockpit:cockpit /app/node_modules/@prisma ./node_modules/@prisma COPY --from=bau --chown=cockpit:cockpit /app/node_modules/prisma ./node_modules/prisma +# Betriebsskripte, die im laufenden Behaelter gebraucht werden: +# totp-geheimnis.mjs zweites Geraet fuer den Zweitfaktor einrichten +# wartungsschluessel.mjs Schluessel fuer /api/wartung ausrechnen +# schluessel-erzeugen.mjs neue Schluessel fuer die Rotation +# +# Das ganze Verzeichnis, nicht einzelne Dateien: sonst faellt beim +# naechsten Betriebsskript wieder auf, dass es fehlt - und zwar erst dann, +# wenn man es braucht. Die Entwicklungsskripte darin laufen hier mangels +# Werkzeugen nicht, kosten aber auch nur ein paar Kilobyte. +COPY --from=bau --chown=cockpit:cockpit /app/scripts ./scripts + # Ablage fuer den Dateitreiber, falls kein Objektspeicher benutzt wird. RUN mkdir -p /app/daten/dokumente && chown -R cockpit:cockpit /app/daten diff --git a/docs/ANLEITUNG.md b/docs/ANLEITUNG.md index 82e61dc..f2310a5 100644 --- a/docs/ANLEITUNG.md +++ b/docs/ANLEITUNG.md @@ -356,6 +356,14 @@ liest es auf dem Server aus: docker compose exec app node scripts/totp-geheimnis.mjs deine@adresse.de ``` +Läuft der Behälter noch mit einer Fassung vor 1.0.1, fehlt das Skript im +Abbild (`Cannot find module`). Dann entweder aktualisieren, oder einmalig: + +```bash +docker compose cp scripts/totp-geheimnis.mjs app:/app/totp-geheimnis.mjs +docker compose exec app node totp-geheimnis.mjs deine@adresse.de +``` + Das ist keine Hintertür: Es läuft nur mit Zugriff auf die Datenbank **und** auf `ENC_KEY_V1`. Wer beides hat, kommt ohnehin an alles. Die Ausgabe gehört trotzdem in kein Protokoll und in keine E-Mail. diff --git a/package.json b/package.json index d5cd39b..c70d50f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "betreuungs-cockpit", - "version": "1.0.0", + "version": "1.0.1", "private": true, "description": "Arbeits- und Dokumentationswerkzeug fuer die ehrenamtliche rechtliche Betreuung", "engines": { diff --git a/src/lib/version.ts b/src/lib/version.ts index bd5021c..c6dd525 100644 --- a/src/lib/version.ts +++ b/src/lib/version.ts @@ -17,7 +17,7 @@ */ /** Muss zur "version" in der package.json passen. */ -export const VERSION = '1.0.0' +export const VERSION = '1.0.1' /** * Kurzer Git-Stand, beim Bauen hineingereicht: