Nach fuenf Fehlversuchen wird eine E-Mail-Adresse gesperrt, erst eine Minute, dann doppelt so lang, hoechstens 15 Minuten. Gezaehlt wird je Adresse, auch fuer unbekannte - sonst verriete die Sperre, welche Konten es gibt. Waehrend der Sperre kommt auch das richtige Passwort nicht durch. Jeder Versuch zaehlt sofort und wird bei Erfolg zurueckgenommen. Zwischen Sperrpruefung und Zaehlen liegt damit kein await; gleichzeitige Anfragen kommen so nicht alle an der Sperre vorbei. Der Zaehler liegt im Speicher des einen Prozesses. Ein Neustart setzt ihn zurueck - der Notausgang, falls sich das einzige Ausbilderkonto aussperrt. Beim Aufraeumen wird eine laufende Sperre nie verdraengt. Die Containerabnahme prueft die Sperre im laufenden Abbild. Das Abnahmeprotokoll ist gegen diesen Stand neu erzeugt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
69 lines
2.6 KiB
Markdown
69 lines
2.6 KiB
Markdown
# Abnahmeprotokoll
|
|
|
|
Erzeugt am 2026-10-04 16:24 Uhr
|
|
|
|
Erzeugt von `scripts/pruefungen/abnahme.mjs` gegen eine **frische, leere Datenbank**.
|
|
|
|
|
|
## A1 · Aus dem Nichts aufsetzbar
|
|
|
|
- ✓ Das erste Ausbilderkonto entsteht auf der Kommandozeile — ohne Fehler
|
|
- ✓ Die Datenbank wurde angelegt und die Migrationen liefen an
|
|
- ✓ Die Anwendung startet und meldet sich gesund
|
|
- ✓ Heile Inhalte werden ohne Beanstandung gelesen — Inhalte in Ordnung
|
|
- ✓ Ein Inhaltsfehler lässt die Prüfung fehlschlagen — Ende 1
|
|
- ✓ Die Meldung nennt die Datei — kaputte-inhalte/handouts/N3-subnetting-rechnen.md:7 (rahmenplan)
|
|
- ✓ Die Meldung nennt die richtige Zeile — erwartet Zeile 7
|
|
- ✓ Die Meldung nennt den fehlerhaften Wert
|
|
- ✓ Die Meldung sagt, wo die gültigen Werte stehen
|
|
|
|
## A2 · Zwei Rollen, keine Selbstregistrierung
|
|
|
|
- ✓ Die Anmeldeseite bietet keine Registrierung
|
|
- ✓ Ohne Anmeldung führt jeder Pfad zur Anmeldung — HTTP 307
|
|
- ✓ Der Ausbilder meldet sich an
|
|
|
|
## A3 · Der Ausbilder legt Konten an
|
|
|
|
- ✓ Der Azubi steht in der Verwaltung
|
|
- ✓ Das Passwort ist in der Oberfläche nirgends mehr zu sehen
|
|
- ✓ In der Datenbank steht kein Klartextpasswort
|
|
- ✓ Das Passwort liegt als Argon2id-Hash — $argon2id$v=19$m=19456,t=2,p=1
|
|
|
|
## A4 · Der Azubi arbeitet
|
|
|
|
- ✓ Der Azubi meldet sich mit dem vergebenen Passwort an
|
|
- ✓ Ein Handout lässt sich als gelesen markieren
|
|
- ✓ Eine Merkkarte lässt sich bewerten — Zuletzt: kommt morgen.
|
|
|
|
## A5 · Aufgabe abgeben und abnehmen
|
|
|
|
- ✓ Der Azubi hält seine Arbeit in Notizen fest
|
|
- ✓ Der Azubi meldet die Aufgabe zur Abnahme
|
|
- ✓ Die Aufgabe erscheint beim Ausbilder zur Abnahme
|
|
- ✓ Der Ausbilder nimmt die Aufgabe ab
|
|
- ✓ Für den Azubi ist die abgenommene Aufgabe gesperrt
|
|
- ✓ Die Abnahme schlägt in der Rahmenplanabdeckung durch
|
|
- ✓ Lücken im Lehrgang werden getrennt ausgewiesen
|
|
|
|
## A6 · Rechte serverseitig
|
|
|
|
- ✓ Der Azubi kommt nicht in die Verwaltung — HTTP 307
|
|
|
|
## A7 · Berichtsheft
|
|
|
|
- ✓ Der Azubi legt das Wochenblatt der laufenden Woche an
|
|
- ✓ Ein Wochenblatt lässt sich öffnen
|
|
- ✓ Das Wochenblatt kommt als PDF heraus — HTTP 200, 2649 Bytes
|
|
|
|
## A8 · Sicherung zurückspielen
|
|
|
|
- ✓ Die Sicherung läuft durch — lernbar-20261004-182433.tar.gz
|
|
- ✓ Zum Beweis wird der Datenbestand beschädigt — 2 → 1 Konten
|
|
- ✓ Die Rückspielung läuft durch — ohne Fehler
|
|
- ✓ Der gelöschte Azubi ist wieder da — Tim Vogt
|
|
- ✓ Auch der Lernverlauf kam mit zurück — 1 Einträge
|
|
- ✓ Der überschriebene Stand wurde zur Seite gelegt, nicht gelöscht — verdraengt-20261004-182436
|
|
|
|
**36 von 36 Prüfungen erfüllt.**
|