4.5 KiB
Erstellerkennung und erneutes Einsenden
Beim App-Start entsteht ein kryptografischer Zufallswert mit 256 Bit über
crypto.getRandomValues(). Er liegt als 64-stellige Hexadezimalzeichenfolge
unter wegwichtel.creator-id.v1 im Local Storage. Keine Zeitzone, Geräteangaben
oder Informationen über den Internetanbieter werden gesammelt. Ein zusätzlicher
Hash würde die Eindeutigkeit des Zufallswerts nicht erhöhen.
Neue Entwürfe bekommen route.creator_id; alte lokale Entwürfe bekommen sie
beim nächsten Speichern. Beim Einsenden landet sie in routes.creator_id.
Die API liefert das Feld, die Moderations-CLI zeigt die Ersteller-ID. Bereits
zugeordnete Server-Strecken behalten ihren Ersteller bei Änderungen. Strecken
älterer Versionen können beim ersten erneuten Einsenden zugeordnet werden.
Speicherung und Löschen
Das Ausschalten des Offline-Speichers, Löschen von Fortschritt, Entwürfen oder
Medien löscht die Gerätekennung nicht. Es gibt keine automatische Bereinigung
dieses getrennten Speicherschlüssels. Die gezielte Entwicklerfunktion
Wegwichtel.LocalRoutes.forgetCreatorId() entfernt die Kennung ausschließlich
nach ausdrücklich bestätigter Internetbrowser-Abfrage. Es wird kein zusätzlicher
Löschbutton in die Kinderoberfläche eingebaut. Nach bestätigtem Löschen entsteht
beim nächsten Zugriff eine neue Kennung; vorhandene Strecken behalten ihre alte
Erstellerzuordnung. Die App kann das Löschen sämtlicher Website-Daten in den
Einstellungen des Internetbrowsers nicht verhindern. Kopierte Browserdaten
kopieren auch die Identität; das ist keine Hardware-ID.
Aktualisieren einer eingesandten Strecke
Der lokale Entwurf bleibt erhalten und merkt sich serverRouteId,
serverPoiId, serverPictureId und den Audio-Status. Erneutes Einsenden nutzt
PUT für bestehende Daten und POST für neue Stationen/Bilder. Entfernte lokale
Stationen und Medien werden bei einer erfolgreichen erneuten Übertragung auch
auf dem Server entfernt. Bestätigte Server-IDs werden nach jedem Schritt
lokal gespeichert, damit ein späterer Fehler nicht zum Neuanlegen der Strecke
führt. Der Entwurf bleibt nach Fehlern erneut einsendbar.
Freigegebene Strecken bleiben unveränderlich. Die Prüfung erfolgt vor der Aktualisierung und zusätzlich in den vorhandenen Server-Schreibprüfungen. Bei älteren Entwürfen fehlen noch die gespeicherten Stations-/Bild-IDs: Beim ersten erneuten Einsenden werden neue Stationen samt Medien angelegt und die alten Stationen anschließend entfernt. Die Strecken-ID bleibt gleich. Deshalb können sich bei dieser einmaligen Übernahme die Stations-IDs ändern.
Die Übertragung mehrerer Dateien ist keine gemeinsame Transaktion. Bei einem Abbruch können einzelne Änderungen bereits auf dem Server sein. Bei einem verlorenen HTTP-Erfolg nach serverseitigem POST ist zusätzlich eine spätere Idempotenzlösung erforderlich. Parallele Bearbeitung ist noch nicht freigegeben; die aktuelle Übertragung behandelt den lokalen Entwurf als vollständigen Stand.
Datenbank und Betrieb
Das Schema und die Startprüfung enthalten die nullable Spalte
routes.creator_id. Neue Datenbanken enthalten sie direkt. Es gibt keine
automatische Migration einer vorhandenen Datenbank; npm run init-db allein
fügt einer schon bestehenden Tabelle keine Spalte hinzu. Bestehende Strecken
dürfen für diese Änderung nicht gelöscht werden. Für die vorhandene Datenbank
ist vor dem Neustart folgende gezielte Schemaergänzung nötig:
ALTER TABLE routes ADD COLUMN creator_id TEXT;
Die Anwendung vorher anhalten und die Datenbank sichern. Den tatsächlichen
Datenbankpfad aus DATA_DIR in .env verwenden. Die Anweisung nur einmal
anwenden und anschließend npm run test:runtime-db ausführen, dann die App
starten. Nicht die Datenbank oder Streckenverzeichnisse löschen.
Berechtigungen
creator_id ist Metadatum, kein Passwort und kein Eigentumsnachweis. Eine frei
übermittelte Kennung gewährt keine Berechtigung. Bestehende Zugriffsregeln bleiben
wirksam. Abgesicherte Eigentumszuordnung, Einladungen und gemeinsame Bearbeitung
stehen in TODO-MODERATION.md weiterhin aus.
Die GPS-Aufzeichnung läuft nur innerhalb einer Bearbeitungssitzung. Schließen, Abbrechen, Rückkehr zur Liste, Streckenwechsel und Verlassen der Seite beenden sie; ein Neustart übernimmt keinen aktiven Aufzeichnungszustand. Beim erneuten Öffnen eines lokalen Entwurfs beginnt eine neue Sitzung. Einzelheiten stehen in GPX-Aufzeichnung.md.