group editor implemented
Sonarqube Scanner / Prepare environment (push) Successful in 6s
Sonarqube Scanner / Build and test (push) Successful in 27s
Sonarqube Scanner / Deploy to Server (push) Failing after 7s
Sonarqube Scanner / SonarQube analysis (push) Failing after 1m14s

This commit is contained in:
Florian Zumpe
2026-10-18 16:33:12 +02:00
parent 9c4d5f6324
commit 31768ae907
28 changed files with 2361 additions and 55 deletions
+79
View File
@@ -0,0 +1,79 @@
# Agent-Hinweise zur Gruppenbearbeitung
Implementierter erster Stand: gemeinsame serverseitige Kopien von eigenen und
veröffentlichten Strecken, acht Unicode-Wichtel im Einladungscode, Drehrad-Eingabe,
Sitzungen, Rollen owner/member, Codewechsel und Widerruf. Bedienung und Einspielen:
[Gruppenbearbeitung.md](../Gruppenbearbeitung.md).
## Beizubehalten
- Originale bleiben unverändert; keine Schreibrechte auf freigegebene Strecken
öffnen. Neue gemeinsame Kopien brauchen erneut die normale Moderationsfreigabe.
- creator_id bleibt Ersteller-Metadatum. Eigentums-/Mitgliedsrechte werden durch
zufällige Sitzungsgeheimnisse geprüft. Niemals Rechte anhand einer frei
übermittelten creator_id oder eines von einem Client behaupteten Rollenfelds vergeben.
- Sitzungsgeheimnisse nur als Hash serverseitig und als HttpOnly-/SameSite-Strict-
Cookie auf dem Client speichern; bei HTTPS zusätzlich Secure. Nicht ausgeben.
- Einladungscodes haben acht der vorhandenen neun Symbole, werden mit randomInt
gewählt und nur gehasht gespeichert. Gültigkeit eine Stunde; falsche Versuche
sind begrenzt. 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.
- Gemeinsame Entwürfe aus öffentlichen Listen ausschließen. Änderungen verwenden
die geladene Gruppenrevision als If-Match. Hintergrundlisten dürfen diese
Bearbeitungsrevision nicht auf einen neueren Stand setzen. Konflikte zeigen,
ohne ungespeicherte Eingaben zu ersetzen. Schreibanfragen bis zum Abschluss sperren.
- Codewechsel entfernt nur die alte Einladung, Gruppenschließung entzieht auch
bestehenden Mitbearbeitern Rechte. Besitzer behalten Zugriff. Gemeinsame
Strecken nicht über die normalen Delete-/Restore-Endpunkte entfernen/wiederherstellen.
- Gruppenzugang benötigt Internet. Lokale Entwürfe weiter sofort anzeigen und
ihre Dateien erst bei Bedarf bzw. beim Übertragen laden.
- Rechtliche Hinweise zu Sitzungs-Cookies und serverseitigen Gruppenentwürfen
statisch auf Deutsch halten; Bedienung vollständig in Deutsch und Englisch.
## Weitere Aufgaben
- Wiederherstellung des eröffnenden Zugangs nach Cookie-/Geräteverlust und eine
ausdrücklich autorisierte Eigentumsübertragung entwickeln.
- Einzelne Mitglieder verwalten und gezielt entfernen; beigetretene Sitzungen
sind derzeit nur gemeinsam über „Gruppe schließen“ widerrufbar.
- Automatisches Zusammenführen bzw. feinere Konflikte und transaktionale
Mehrdatei-Übertragungen evaluieren. Bereits erfolgreiche Teiländerungen können
bei einem späteren Fehler bestehen bleiben. Neue Routen-POSTs sind noch nicht
gegen verlorene Erfolgsantworten idempotent.
- Expliziten unabhängigen Moderationszugang für private Gruppenmedien und einen
Ablauf zum Anfordern ihrer Veröffentlichung ergänzen; keinen Rechte-Bypass
anhand frei setzbarer Header oder beliebiger Basic-Auth-Header einführen.
- Aufbewahrung und Bereinigung verwaister Gruppen, Sitzungen und Kopien sowie
weitergehende Quoten und verteilte Sperren für einen Mehrprozessbetrieb planen.
- Der Gruppen-Code ist eine Einladung, kein persönlicher Identitätsnachweis.
Rechteprüfung für einzelne Inhalte bleibt eine getrennte offene Aufgabe.
## Stationssperren und zurückgehaltene Änderungen
- `src/services/point-locks.js` verwaltet atomare JSON-Sperrdateien pro Station
mit creator_id, Sitzungshash und zufälligem Bearbeitungsschlüssel. Rechte nicht
allein anhand der creator_id prüfen. Übernahmen brauchen eine bestätigte,
vergleichende Ersetzung des gerade angezeigten Schlüssels; während laufender
Speicherung weder freigeben noch übernehmen oder die Gruppe schließen.
- Alle Stations-Schreibpfade einschließlich Bilder/Ton, Entfernung und Umordnung
durch `guardPoint` schützen, auch bei alternativen URL-Schreibweisen.
- `X-Poi-Lock` und `If-Poi-Match` sind Pflicht. Der Inhaltsabdruck berücksichtigt
auch tatsächliche Dateibytes. Antwortheader `X-Poi-Version`/`X-Poi-Id` nach
erfolgreichen Teiländerungen aktualisieren. Stations-Schreibzugriffe verwenden
diese Prüfung anstelle des streckenweiten If-Match, damit verschiedene
Stationen unabhängig bearbeitbar sind. Das Einprozessmodell bleibt erforderlich.
- `public/js/group-points.js` sichert Entwürfe inklusive File/Blob und
Entfernungsvormerkungen vor dem Senden in IndexedDB. Transaktionsabschluss
abwarten; bei Quotenfehlern niemals erfolgreiche Sicherung behaupten.
- Entwürfe auch ohne Netz bzw. nach verlorenem Zugang anzeigen. Erst nach
erneutem Sperrerwerb und Inhaltsvergleich senden. Bei Abweichungen Vergleich
mit ausdrücklicher Bestätigung; keine automatische Wiederholung/Überschreibung.
- Datei-Entfernungen bei Gruppen zunächst vormerken. Bereits quittierte
Übertragungen aus der Warteliste nehmen. Die ursprüngliche Vergleichsbasis
behalten, bis sämtliche Änderungen erfolgreich übertragen wurden.
- Weiter offen: atomare Mehrdatei-Übertragungen/Idempotenz bei verlorenen
Erfolgsantworten, gezieltes Zusammenführen einzelner Felder und Auflösung
entfernter Stationen sowie verteilte Sperren. Eine nachfolgende Aufnahme
kann nicht ohne Einschränkungen zurückgerufen werden.