fix tests and change invitation mechanics
Sonarqube Scanner / Prepare environment (push) Successful in 8s
Sonarqube Scanner / Build and test (push) Successful in 24s
Sonarqube Scanner / SonarQube analysis (push) Failing after 1m2s
Sonarqube Scanner / Deploy to Server (push) Successful in 6s

This commit is contained in:
Florian Zumpe
2026-10-19 17:21:50 +02:00
parent a66a795407
commit cacc63be66
13 changed files with 349 additions and 146 deletions
+21 -16
View File
@@ -15,10 +15,13 @@ Sitzungen, Rollen owner/member, Codewechsel und Widerruf. Bedienung und Einspiel
- Sitzungsgeheimnisse nur als Hash serverseitig und als HttpOnly-/SameSite-Strict-
Cookie auf dem Client speichern; bei HTTPS zusätzlich Secure. Nicht ausgeben.
- Einladungscodes haben fünf Stellen mit den vorhandenen neun Symbolen.
Wiederholungen sind erlaubt; jede Stelle wird unabhängig mit randomInt
gewählt. Codes werden dauerhaft nur gehasht gespeichert; der aktuelle Klartext wird für
die Besitzeranzeige im Arbeitsspeicher des App-Prozesses gehalten. Gültigkeit 30 Minuten; falsche Versuche
sind begrenzt. Variationselektoren ändern die Unicode-Zuordnung nicht.
Wiederholungen sind erlaubt. Das Auswahlpopup wird zufällig vorbelegt; erst die
Bestätigung speichert den vom Nutzer gewählten Code. Server erzeugt oder
ersetzt Codes niemals automatisch. Ungültige bzw. belegte Codes zurückweisen.
- Codes dauerhaft in collaboration_invitations speichern; SHA-256-Abdruck und
Ablaufzeitpunkt bleiben in collaboration_groups. Klartext nur für Besitzer
ausliefern, auch nach Neustart. Gültigkeit 60 Minuten; falsche Versuche begrenzen.
Variationselektoren ändern die Unicode-Zuordnung nicht.
- Schutz auch auf den ursprünglichen /api/routes/...-Adressen für alle Gruppen-
Dateien durchsetzen. Anders geschriebene IDs (führende Nullen, Prozentkodierung,
Exponentialschreibweise, Groß-/Kleinschreibung der Pfade) dürfen ihn nicht umgehen.
@@ -80,10 +83,12 @@ Sitzungen, Rollen owner/member, Codewechsel und Widerruf. Bedienung und Einspiel
entfernter Stationen sowie verteilte Sperren. Eine nachfolgende Aufnahme
kann nicht ohne Einschränkungen zurückgerufen werden.
- Einladungscodes nach 30 Minuten automatisch erneuern, solange keine aktive
Stationssperre vorliegt. Abgelaufene Codes erlauben keinen neuen Beitritt, auch
wenn ihre Erneuerung wegen aktiver Stationen aufgeschoben ist. Mitgliedschaften
bleiben erhalten. Wartung im Serverprozess starten und beim Beenden stoppen.
- Einladungscodes laufen nach 60 Minuten ohne Nutzung ab, bleiben unverändert
und erlauben dann keinen neuen Beitritt. Erfolgreicher Beitritt, explizites Öffnen
zur Bearbeitung, Sperrerwerb, gültige Aktivitätsmeldung und erfolgreiche Speicherung
verlängern auf 60 Minuten. Bestehende Mitgliedschaften bleiben erhalten und
können durch Bearbeitung denselben Code reaktivieren. Passive Abfragen ändern
keine Frist. Wartung bereinigt nur abgelaufene Stationssperren, niemals Codes.
- Sperren nach 60 Minuten ohne Aktivität entfernen; updated_at bei tatsächlicher
Bearbeitung/Speicherung aktualisieren. Reine Statusabfragen und unbenutzte
Fenster dürfen die Frist nicht verlängern. Laufende Schreibanfragen nicht
@@ -95,11 +100,11 @@ Sitzungen, Rollen owner/member, Codewechsel und Widerruf. Bedienung und Einspiel
## Code-Popups
- Gruppenbutton zeigt unmittelbar den echten fünfstelligen Einladungscode. Keine
vorgeschaltete Zwei-Wichtel-Vorschau wieder einführen; sie wurde mit dem Code
verwechselt. Eine unvollständige Codeantwort nicht anzeigen.
- Codeanzeige und Codeeingabe verwenden getrennte breite native Dialoge. Alle
fünf Drehräder nebeneinander anordnen; Wiederholungen weiterhin zulassen.
- Scrollschritt in groups.js und Optionshöhe/Innenabstand in editor.css müssen
übereinstimmen (96 Pixel). Schließen der Eingabe verwirft verspätete Antworten;
die automatische Einladungsaktualisierung darf die Eingabe nicht überdecken.
- Gruppenbutton öffnet zuerst fünf zufällig vorbelegte, veränderbare Drehräder.
Auswahl vor Übertragung lokaler Strecken bestätigen lassen. Abbrechen überträgt
nichts. Danach gespeicherten Code anzeigen; Editor erst nach ausdrücklicher Aktion.
- Auswahl, Beitritt und Codeanzeige verwenden breite native Dialoge. Alle fünf
Drehräder nebeneinander; Wiederholungen zulassen. Codeänderung nur ausdrücklich.
- Scrollschritt in groups.js und Optionshöhe/Innenabstand in editor.css stimmen
überein (96 Pixel). Schließen der Eingabe verwirft verspätete Antworten;
die passive Einladungsabfrage darf die Eingabe nicht überdecken.