Files
Florian Zumpe 9c4d5f6324
Sonarqube Scanner / Prepare environment (push) Successful in 7s
Sonarqube Scanner / Build and test (push) Successful in 23s
Sonarqube Scanner / SonarQube analysis (push) Successful in 56s
Sonarqube Scanner / Deploy to Server (push) Successful in 8s
editor overhaul
2026-10-18 14:26:25 +02:00

6.2 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.

Fehlende Server-Strecke, Papierkorb und lokaler Status

Beim Öffnen der Entwurfsliste werden lokale Strecken sofort angezeigt. Bereits abgesandte Strecken werden im Hintergrund mit includeDeleted=true geprüft. Liegt die Strecke im Papierkorb, wird lokal „Abgelehnt“ angezeigt. Existiert die Server-ID auch mit dieser Abfrage nicht mehr (HTTP 404), erscheint „Entfernt“. Der Status wird auf dem Gerät gespeichert und bleibt ohne Internet sichtbar. Fehlende Berechtigung, Netzwerk- und Serverfehler verändern ihn nicht. Eine erfolgreiche Abfrage nach manueller Wiederherstellung entfernt den alten Ablehnungsstatus. Ungespeicherte Eingaben werden durch die Prüfung nicht ersetzt.

Beim bewussten erneuten Einsenden einer entfernten oder abgelehnten Strecke werden alte Server-Zuordnungen für Strecke, Stationen, Bilder und Ton entfernt. Der lokale Inhalt und seine Dateireferenzen bleiben erhalten. Eine neue Strecke mit neuer ID und derselben Erstellerkennung wird zur Prüfung angelegt. Der alte Papierkorb-Eintrag wird nicht wiederhergestellt oder verändert. Die neue Strecke muss erneut freigegeben werden. Bestätigte neue IDs werden auch bei einem späteren Übertragungsfehler gespeichert; weitere Versuche setzen dort fort.

Nach erfolgreicher neuer Einreichung wird der Status gelöscht und angezeigt: „Die Strecke wurde neu angelegt und zur Prüfung gesendet.“ Eine vorhandene, noch nicht freigegebene Strecke wird unter derselben ID aktualisiert und erhält die normale Erfolgsmeldung. Freigegebene Strecken bleiben gegen Änderungen gesperrt. Nur eine bestätigte 404-Antwort oder ein bestätigter Papierkorb-Status löst eine neue Einreichung aus, keine Netzwerk-, Berechtigungs- oder anderen Serverfehler.

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 mit ausgeschalteter Aufnahme. Der Schalter „Meinen Weg aufnehmen“ aktiviert sie. Einzelheiten stehen in GPX-Aufzeichnung.md.