Repository navigation
Releases
Releases · FuelStat/fuelstat
Fuelstat 0.10.0
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.
Fuelstat 0.9.1
Neu
- API:
GET /api/v1/stationsliefert Tankstellen in der Nähe mit aktuellen Preisen von Tankerkönig, damit die Apps beim Tanken Tankstelle und Preis vorschlagen können. Der API-Key bleibt auf dem Server.
Technik
- Das Repository ist umgezogen nach FuelStat/fuelstat; Links in App und Doku zeigen auf die neue Adresse. Die iOS-App entsteht in FuelStat/fuelstat-ios.
- Abhängigkeiten aktualisiert: express-rate-limit 8.7.3 (API), actions/setup-node 7 (CI).
Hinweise zum Update
- Für die Tankstellensuche in den Apps den Tankerkönig-Key als
TANKERKOENIG_API_KEYininfra/.enveintragen (derselbe wie inapi/key.key) und die API neu starten. - Auf bestehenden Installationen die Git-Adresse umstellen:
git remote set-url origin https://github.com/FuelStat/fuelstat.git(die alte Adresse leitet GitHub vorerst weiter).
Fuelstat 0.9.0
Erste Version mit Versionsnummer: alles, was Fuelstat bis zu diesem Stand kann.
Neu
- Fahrzeuge für alle Antriebsarten (Benzin, Diesel, Autogas, Erdgas, Elektro, Hybrid, Plug-in-Hybrid, Wasserstoff) mit Foto, Kennzeichen, FIN, Kauf, Intervallen, Versicherung, Steuer und Reifengrößen; Anlegen als Assistent in vier Schritten
- Tanken, Laden, Ausgaben, Fahrten und reine Kilometerstände erfassen, mit Tankstellen- und Ladestationssuche samt aktuellem Preis
- Plug-in-Hybride: Tanken und Laden im selben Fahrzeug, Verbrauch getrennt, gemeinsame Energiekosten
- Statistiken: Verbrauch je Abschnitt, Monat und Jahr, Kosten pro km und Monat, CO₂, Jahresvergleich, Ausgaben nach Kategorie und Gruppe
- Fälligkeiten für TÜV, Wartung, Versicherung und Steuer mit E-Mail-Erinnerung; Monatsbericht per E-Mail
- Kategorien aus der API, dazu Premium-Kategorien (Parken, Maut, Pflege, Leasing, Zubehör) und bis zu 10 eigene Kategorien mit Symbol, Farbe und Gruppe
- Import aus CSV mit Spaltenzuordnung und Vorschau, Export als CSV und Bericht zum Drucken
- Konto mit Zwei-Faktor-Anmeldung, Profilbild, Abmelden auf allen Geräten, Konto löschen
- Benutzerverwaltung und Feedback-Eingang für Admins, Tarif-Grundgerüst (Free, Plus, Flotte)
- Als App auf dem Handy installierbar, mit unterer Navigationsleiste und Wischen zwischen den Reitern
- „Neuigkeiten“: diese Übersicht mit der installierten Version
Verbessert
- Deutlich schnellere Seiten: Daten werden parallel und direkt von der API geladen, Ladebalken beim Seitenwechsel, „Zurück“ ohne Neuladen
- Bilder werden beim Hochladen verkleinert und als WebP gespeichert (aus mehreren MB werden einige hundert KB)
- Angemeldet bleiben bei aktiver Nutzung (bis zu 90 Tage)
- Einheitliches Design für Übersicht, Fahrzeugseite, Einträge und alle Eintragsformulare
Behoben
- Der Preis pro Liter der gewählten Tankstelle wird nicht mehr von der automatischen Berechnung überschrieben
- Ort-Vorschläge verschwinden, sobald ein Ort eingetragen ist
- Kopfzeile in der iPhone-App wird nicht mehr weichgezeichnet
Sicherheit
- Hochgeladene Bilder ohne Metadaten (kein GPS-Ort) und nur über signierte, ablaufende Adressen abrufbar
- 2FA-Schlüssel und SMTP-Passwörter verschlüsselt gespeichert, CORS standardmäßig aus, Rate Limiting, CSRF-Schutz, CodeQL
Technik
- API: Node.js 24 mit Express, PostgreSQL 15, Betrieb im
prod-Container; PHP-Frontend greift nur über die API zu - Automatische Tests (PHP und API) und Prüfung der YAML-Dateien bei jedem Pull Request
- Datensicherung mit Verschlüsselung und Wiederherstellungsprobe
Hinweise zum Update
- Datenbank auf Stand Migration 014 bringen (
docs/betrieb.md) - Einmalig vorhandene Bilder umstellen:
sudo docker compose exec api node scripts/bilder-optimieren.js - nginx:
/uploads/sperren,FUELSTAT_API_BASE_URLdirekt auf127.0.0.1:3000setzen (docs/installation.md)