Repository navigation
Fuelstat 0.10.0
Pre-release
Pre-release
Sicherheit
- Gelöschte Konten: Bereits ausgestellte Tokens gelten nicht mehr – die API prüft bei jeder Anfrage, ob das Konto noch existiert. Vorher blieb ein Token bis zu 7 Tage gültig, bei Admins aus
ADMIN_USER_IDSsogar mit Admin-Rechten. - Login-Sperre je IP-Adresse und E-Mail statt nur je E-Mail, dazu ein Limit je IP über alle Konten: Fremde können ein Konto nicht mehr durch absichtliche Fehlversuche 15 Minuten lang aussperren. Das PHP-Frontend gibt dafür die Besucher-IP an die API weiter.
- 2FA-Codes gelten nur noch einmal (RFC 6238); ein abgefangener Code lässt sich nicht innerhalb seines Zeitfensters erneut verwenden.
- Abgewiesene Admin-Zugriffe werden mit dem Routenmuster statt der aufgerufenen Adresse protokolliert, damit keine Eingaben des Clients ins Log gelangen (Code-Scanning, Log-Injection).
- Rate-Limit: Ob eine Anfrage je Konto oder je IP gezählt wird, entscheidet nur noch das geprüfte Token, nicht ob der Client überhaupt eines mitschickt (Code-Scanning).
- Tankstellen- und Ladestationssuche nehmen Koordinaten und Radius nur noch als Dezimalzahlen an (z. B.
48.85235); Hex- oder Exponent-Schreibweisen wie0x10werden mit 400 abgelehnt. - Tarifänderungen werden protokolliert (wer, wann, von welchem zu welchem Tarif, über welchen Weg); abgewiesene Zugriffe auf Admin-Funktionen erscheinen im Log. Admins sehen den Verlauf je Konto über die API. Automatische Tests belegen, dass normale Konten ihren oder fremde Tarife nicht ändern können (#102).
Neu
- API:
GET /api/v1/vehicles/:vehicleId/consumptionliefert Verbrauch je Einheit (Abschnitte, Monate, Jahre, Ø/Min/Max), gekaufte Mengen, CO₂ und den Stromanteil;/statszusätzlich die Fahrleistung,/costsSummen je Kategorie und die Jahre mit Kosten (#82). - API:
GET /api/v1/vehicles/:vehicleId/costsliefert Kosten je Fahrzeug – Summen nach Energie und Ausgaben, Kosten pro km, Ø je Monat, laufender Monat und Vormonat sowie Monatssummen je Eintragsart, optional für ein Jahr (#124). - API:
GET /api/v1/charging-stationsliefert Ladestationen in der Nähe (Open Charge Map) für Web-App und Apps (#123). - Betreiber können Tarife auch ohne Web-Oberfläche setzen:
node scripts/tarif-setzen.jsim API-Container (siehedocs/betrieb.md, „Tarife verwalten“).
Verbessert
- Statistik, Übersicht, Ausgaben und Bericht zeigen nur noch Werte, die die API rechnet (Verbrauch, CO₂, Stromanteil, Fahrleistung, Kosten je Kategorie, Monat und Jahr). Web-App und Apps haben damit dieselben Zahlen; Statistik und Übersicht laden dafür nicht mehr alle Einträge (#82).
- Kosten pro km, Ø je Monat, Strecke und Kosten je Monat in den Reitern „Ausgaben“ und „Statistiken“ kommen aus der API und sind damit in Web-App und Apps gleich. Die Strecke zählt jetzt nur echte Tachostände, dafür auch „Kilometerstand notieren“; geschätzte Stände zählen nicht mehr mit (#124).
- Tankstellen- und Ladestationssuche im Erfassungsformular laufen über die API: gleiche Ergebnisse wie in den Apps, und die Tankstellensuche nutzt jetzt den Zwischenspeicher der API (vorher fragte die Web-App bei jeder Suche Tankerkönig) (#123).
Technik
- API aufgeteilt (#110):
server.jsstartet nur noch,app.jsbaut die Middleware-Kette, Endpunkte liegen je Fachbereich unterbackend/src/routes/, Querschnitt untermiddleware/undlib/, 2FA als Service. Verhalten und Endpunkte unverändert; Aufbau beschrieben indocs/backend.md. - Die doppelte Verbrauchsrechnung im PHP-Frontend ist entfernt; ihre Testfälle laufen jetzt als API-Tests (#82).
- Die Web-App ruft Tankerkönig und Open Charge Map nicht mehr selbst auf; die API-Keys liegen nur noch in
infra/.envstatt inapi/key.keyundapi/ocm.key(#123). - Betriebsdoku: Reihenfolge beim Aktualisieren korrigiert – Datenbank-Migrationen werden jetzt ausdrücklich vor dem Neustart der API eingespielt, mit Sicherung vorab und Kontrolle der Version danach (
docs/betrieb.md, README).
Hinweise zum Update
- Vor dem
git pulldie API-Keys umziehen, sonst bricht der Pull wegenapi/ocm.keyab: Tankerkönig-Key (ausapi/key.key) alsTANKERKOENIG_API_KEYund Open-Charge-Map-Key (ausapi/ocm.key) alsOCM_API_KEYininfra/.enveintragen; danachgit update-index --no-skip-worktree api/ocm.key && git checkout -- api/ocm.key. Nach dem Ausrollenapi/key.keylöschen. - Migration einspielen, bevor die API neu startet:
cd infra && sudo docker compose exec -T db sh -c 'psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB"' < ../backend/database/postgres_015_plan_changes.sql - Migration einspielen, bevor die API neu startet:
cd infra && sudo docker compose exec -T db sh -c 'psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d "$POSTGRES_DB"' < ../backend/database/postgres_016_mfa_last_counter.sql - Läuft die Seite hinter Cloudflare: in nginx
real_ipfür die Cloudflare-Adressen einrichten (siehedocs/installation.md, „Hinter Cloudflare“), damit Login-Sperren je IP nicht viele Nutzer gemeinsam treffen. Ohne Cloudflare ist nichts zu tun.