group editor implemented
This commit is contained in:
@@ -864,3 +864,50 @@ Die Dateinamen und relativen Pfade unter `storage/` bleiben ausschließlich inte
|
||||
Unter `tools/python/` liegen interaktive Skripte für Anlegen, Ändern, Erweitern, Wiederherstellen und Löschen von Routen, POIs, Bildern und Audio. Sie verwenden ausschließlich die Python-Standardbibliothek. Fehlende Parameter werden abgefragt. Antwortet ein vorgeschalteter Webserver mit HTTP 401, fragt die gemeinsame Request-Schicht Benutzername und Passwort ab und wiederholt den ursprünglichen Request.
|
||||
|
||||
Details und Aufrufbeispiele stehen in [`Python-Werkzeuge.md`](Python-Werkzeuge.md).
|
||||
|
||||
## Gruppenbearbeitung
|
||||
|
||||
Siehe [Gruppenbearbeitung.md](Gruppenbearbeitung.md). Alle Gruppenantworten sind
|
||||
`no-store`. POST/DELETE prüfen einen übermittelten Origin gegen den Host.
|
||||
|
||||
| Methode und Pfad | Zweck |
|
||||
| --- | --- |
|
||||
| GET /api/groups | Gruppen der Sitzung auflisten; ohne Sitzung leere Liste |
|
||||
| POST /api/groups | Mit routeId und creator_id eine unabhängige Kopie öffnen |
|
||||
| POST /api/groups/join | Mit code (Array aus acht Unicode-Symbolen) und creator_id beitreten |
|
||||
| POST /api/groups/:id/code | Als Besitzer neuen Einladungscode erzeugen |
|
||||
| DELETE /api/groups/:id | Als Besitzer Einladung und Mitbearbeiterzugänge widerrufen |
|
||||
|
||||
Der Server setzt `wegwichtel_group_session` als geschütztes Cookie auf `/api`.
|
||||
Nur Hashes werden gespeichert. Die creator_id allein erteilt keine Gruppenrechte.
|
||||
Gruppenantworten enthalten id, route, role, active und revision; nur das Erzeugen
|
||||
oder Erneuern liefert den Klartextcode und expiresAt (Unixsekunden).
|
||||
|
||||
Die bisherigen `/api/routes/:id/...`-Endpunkte prüfen auch den Gruppenzugang,
|
||||
einschließlich GPX, Bilder und Audio. Unveröffentlichte Gruppenkopien sind nicht
|
||||
öffentlich gelistet. GET liefert `X-Group-Route` und `X-Group-Revision`; Änderungen
|
||||
müssen die geladene Revision als `If-Match` senden. Überlappende oder veraltete
|
||||
Änderungen ergeben 409. Erfolgreiche Änderungen erhöhen die Revision. API-Clients
|
||||
müssen Cookies beibehalten; Gruppenmedien können damit auch als normale Bild- und
|
||||
Audio-Ressourcen abgerufen werden. Freigegebene Strecken bleiben schreibgeschützt.
|
||||
|
||||
### Stationssperren für gemeinsame Entwürfe
|
||||
|
||||
`POST /api/groups/routes/:routeId/pois/:poiId/lock` verwendet die berechtigte
|
||||
Gruppensitzung. `{}` beansprucht eine freie Station. Antwort: `token`, `version`,
|
||||
`mediaVersion`, `poi`. Eine vorhandene Bearbeitung ergibt 423 mit
|
||||
`details.code=point-locked` und `details.replace`. Nach einer bestätigten Rückfrage
|
||||
mit `{ "replace": "<angezeigter Schlüssel>" }` erneut senden. Eine inzwischen
|
||||
veränderte Sperre braucht eine neue Bestätigung. `{ "token": "<eigener Schlüssel>" }`
|
||||
aktualisiert den eigenen Inhaltsstand; `{ "release": true, "token": "…" }` gibt
|
||||
nur die eigene Sperre frei. Fremde creator_id-Angaben werden nicht übernommen.
|
||||
Laufende Schreibanfragen ergeben `point-busy` (423), ein verlorener Zugang zur
|
||||
Bearbeitung `point-lost` (423), ein veränderter Stationsinhalt `point-changed` (409).
|
||||
|
||||
Für Schreibzugriffe auf `/api/routes/:id/pois/:poiId` und dessen Bild-/Tonpfade
|
||||
sind `X-Poi-Lock: <token>` und `If-Poi-Match: <version>` erforderlich. Anstelle
|
||||
von If-Match wird dort der Stationsinhalt geprüft. Erfolgreiche Antworten liefern
|
||||
`X-Poi-Id` und `X-Poi-Version`, solange die Station existiert. Diese Version bei
|
||||
mehreren Dateioperationen jeweils weiterverwenden. Eine neue Station wird über
|
||||
den bisherigen POST angelegt und vor den weiteren Dateioperationen gesperrt.
|
||||
Die Versionsabdrücke berücksichtigen Dateibytes, nicht bloß URLs oder Metadaten.
|
||||
|
||||
Reference in New Issue
Block a user