fix tests and change invitation mechanics
This commit is contained in:
+32
-23
@@ -1,18 +1,18 @@
|
||||
# Gemeinsam bearbeiten
|
||||
|
||||
In „Strecken bearbeiten“ öffnet der kleine Button mit zwei gezeichneten Wichteln
|
||||
zwischen Stift und
|
||||
Löschen den gemeinsamen Entwurf und zeigt anschließend den echten Code mit
|
||||
fünf Wichteln in einem großen Popup an. Eine vorgeschaltete Zwei-Wichtel-Vorschau
|
||||
gibt es nicht mehr. Das Original bleibt unverändert. Bei lokalen Entwürfen
|
||||
fragt die App vorher, ob Weg, Stationen, Bilder und Ton übertragen werden dürfen.
|
||||
Ein bereits eingesandter eigener Entwurf wird dabei zuerst aktualisiert.
|
||||
zwischen Stift und Löschen zuerst ein großes Popup zur Codeauswahl. Die fünf
|
||||
Drehräder sind zufällig vorbelegt. Du kannst jeden Wichtel ändern; Wiederholungen
|
||||
sind erlaubt. Erst „Diesen Code verwenden“ bestätigt deine Auswahl. Abbrechen
|
||||
legt keine Gruppe an und überträgt keine Strecke. Bei lokalen Entwürfen fragt
|
||||
die App danach, ob Weg, Stationen, Bilder und Ton übertragen werden dürfen.
|
||||
Ein bereits eingesandter eigener Entwurf wird zuerst aktualisiert. Anschließend
|
||||
zeigt ein eigenes Popup den gespeicherten Code. Die Bearbeitung beginnt erst
|
||||
mit „Entwurf bearbeiten“. Das Original bleibt unverändert.
|
||||
|
||||
Danach zeigt die App fünf Wichtel als Gruppencode. Andere öffnen in der
|
||||
Streckenverwaltung „Gruppencode eingeben“. Ein eigenes breites Popup bietet
|
||||
Platz für alle fünf Drehräder. Dort schieben sie die Bilder in den fünf
|
||||
Drehrädern nach oben oder unten. Es zählen die Wichtel in der Mitte, von links
|
||||
nach rechts. Wiederholungen sind erlaubt. Pfeiltasten und die Pfeilschaltflächen
|
||||
Andere öffnen in der Streckenverwaltung „Gruppencode eingeben“. Dort schieben
|
||||
sie die Bilder in fünf Drehrädern nach oben oder unten. Es zählen die Wichtel
|
||||
in der Mitte, von links nach rechts. Pfeiltasten und Pfeilschaltflächen
|
||||
funktionieren ebenfalls. „Mitmachen“ öffnet den gemeinsamen Entwurf.
|
||||
|
||||
## Arbeiten und Einladungen
|
||||
@@ -25,12 +25,19 @@ funktionieren ebenfalls. „Mitmachen“ öffnet den gemeinsamen Entwurf.
|
||||
- Wenn jemand zwischenzeitlich gespeichert hat, weist die App den veralteten
|
||||
Speicherversuch zurück. Die Eingaben bleiben stehen und können vor dem Laden
|
||||
des neuen Stands gesichert werden. Es gibt noch keine automatische Zusammenführung.
|
||||
- Der Einladungscode gilt 30 Minuten. Anschließend erzeugt die Website automatisch
|
||||
einen neuen Code, sobald keine Station mehr gesperrt ist. Ein abgelaufener Code
|
||||
erlaubt auch während einer Bearbeitung keinen neuen Beitritt. Bereits beigetretene
|
||||
Personen behalten ihren Zugang. Das geöffnete Codefenster prüft alle 30 Sekunden
|
||||
auf einen neuen Code. Die eröffnende Person kann mit „Neuen Code anzeigen“ auch
|
||||
früher wechseln; während einer Stationsbearbeitung wartet auch dieser Wechsel.
|
||||
- Der Einladungscode gilt 60 Minuten. Erfolgreiches Mitmachen, Öffnen zur
|
||||
Bearbeitung, Übernehmen einer Station, gemeldete tatsächliche Bearbeitungsaktivität
|
||||
und erfolgreiches Speichern setzen die Frist erneut auf 60 Minuten.
|
||||
Listen, Codeanzeige, reine Datenabrufe und Sperrstatusabfragen verlängern sie nicht.
|
||||
- Das Code-Popup zeigt Ablaufzeit und verbleibende Minuten und Sekunden. Die
|
||||
Restzeit zählt herunter; neue Aktivität wird spätestens nach 30 Sekunden übernommen.
|
||||
- Der Code wird niemals automatisch geändert oder neu erzeugt. Nach Ablauf
|
||||
erlaubt er keinen neuen Beitritt. Bereits beigetretene Personen behalten ihren
|
||||
Zugang und können durch erneute Bearbeitung die Gültigkeit desselben Codes verlängern.
|
||||
- „Gruppencode“ zeigt den gespeicherten Code erneut an. „Code auswählen“ öffnet
|
||||
die Auswahl; nur eine ausdrückliche Bestätigung ändert oder reaktiviert den Code.
|
||||
Während einer Stationsbearbeitung wartet ein Codewechsel, bis die Stationen frei sind.
|
||||
Bereits verwendete Codes anderer Gruppen werden mit einem Hinweis abgewiesen.
|
||||
- „Gruppe schließen“ entfernt den Zugang der anderen Personen und den Code.
|
||||
Die eröffnende Person behält ihren Entwurf und kann wieder einen Code erzeugen.
|
||||
- Es sind höchstens 50 Zugänge je Gruppe und zwölf gleichzeitig offene Gruppen
|
||||
@@ -74,7 +81,8 @@ npm run test:runtime-db
|
||||
systemctl --user restart wegwichtel.service
|
||||
```
|
||||
|
||||
`init-db` legt die drei neuen STRICT-Tabellen an. Es verändert keine bestehenden
|
||||
`init-db` legt fehlende STRICT-Tabellen an, einschließlich `collaboration_invitations`
|
||||
für die dauerhaft gespeicherten Codes. Es verändert keine bestehenden
|
||||
Streckentabellen und löscht keine Strecken. Eine Neuerzeugung oder das Löschen
|
||||
der vorhandenen Datenbank ist hierfür nicht erforderlich.
|
||||
|
||||
@@ -154,8 +162,9 @@ zur vorhandenen Anzeige des belegten Gerätespeichers. Browserdaten-Löschung ka
|
||||
sie entfernen. Sie enthalten nur die betroffene Station und neu ausgewählte
|
||||
Dateien; vorhandene Aufnahmen werden hierfür nicht gesammelt heruntergeladen.
|
||||
|
||||
Einladungen werden dauerhaft weiterhin nur als Hash gespeichert. Den neu erzeugten
|
||||
Klartext hält der App-Prozess im Arbeitsspeicher für die berechtigte Anzeige vor.
|
||||
Nach einem App-Neustart bleibt der zuletzt gültige Code weiterhin bis zu seinem
|
||||
Ablauf verwendbar. Falls er auf dem Gerät nicht mehr angezeigt wird, kann die
|
||||
eröffnende Person bei freien Stationen einen neuen Code anfordern.
|
||||
Die ausgewählten Codes liegen in `collaboration_invitations`, der zugehörige
|
||||
SHA-256-Abdruck und Ablaufzeitpunkt in `collaboration_groups`. Nur die berechtigte
|
||||
eröffnende Sitzung kann den Code abrufen. Nach einem App-Neustart wird derselbe
|
||||
Code wieder angezeigt; es findet kein automatischer Ersatz statt. Bestehende
|
||||
Gruppen aus der vorherigen Version enthalten noch keinen gespeicherten Klartext.
|
||||
Für sie muss die eröffnende Person einmal ausdrücklich einen Code auswählen.
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user