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
+5
View File
@@ -173,3 +173,8 @@ Schulleitung, Schulträger und Schulamt nicht als Betreiber der Website führen.
Die konkrete Nutzungsfreigabe für die Schule bleibt gesondert festzulegen.
Kontakt: info@wegwichtel.de. Die Anschrift ist noch zu ergänzen.
Rechte fremder Urheber und bestehende Lizenzen bleiben davon unberührt.
## Gemeinsame Entwürfe
Vor Änderungen an Gruppenrechten und Code-Eingabe zusätzlich
`docs/agents/GRUPPENBEARBEITUNG.md` lesen und bei Übergaben ausdrücklich nennen.
+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.
+13 -5
View File
@@ -6,13 +6,21 @@ gezieltes Löschen nur nach ausdrücklicher Bestätigung und erneutes Einsenden
nicht freigegebener Strecken. Beschreibung: [CREATOR-ID.md](../CREATOR-ID.md).
Das GPX-Attribut `creator="Wegwichtel"` bezeichnet weiterhin nur das Programm.
Noch offen für gemeinsame Bearbeitung:
Erster Gruppenstand umgesetzt: gemeinsame Kopien, Wichtelcodes, geschützte
Sitzungen, owner/member-Rollen und Revisionsprüfung. Details und Grenzen:
[GRUPPENBEARBEITUNG.md](GRUPPENBEARBEITUNG.md).
- Authentifizierte Eigentumszuordnung und Einladungen für Mitbearbeiter entwickeln.
Eine frei übermittelte Gerätekennung allein beweist kein Eigentum.
Noch offen für den weiteren Ausbau:
- Geräteübergreifende Anmeldung, Wiederherstellung und gezielte Mitgliederverwaltung
ergänzen. Gruppenrechte und Einladungen bestehen bereits auf Sitzungsbasis;
eine frei übermittelte Gerätekennung beweist weiterhin kein Eigentum.
- Wiederherstellung nach verlorenen Browserdaten und bewussten Gerätewechsel planen.
- Gleichzeitige Änderungen und Versionskonflikte erkennen; der derzeitige lokale
Entwurf wird beim Einsenden als vollständiger Stand behandelt.
- Automatisches Zusammenführen und feinere Konfliktauflösung ergänzen. Gemeinsame
Entwürfe erkennen inzwischen veraltete Revisionen und sperren überlappende Writes.
Stationssperren, bestätigte Übernahme und lokale Rückhaltung einschließlich
Inhaltsvergleich beim erneuten Senden sind umgesetzt.
Lokale Wieder-Einreichungen behandeln den Entwurf weiterhin als vollständigen Stand.
- Idempotente POSTs auch bei verlorenem HTTP-Erfolg und Gesamtübertragungen mit
mehreren Dateien absichern.