cve fixes
This commit is contained in:
@@ -10,7 +10,7 @@ Eigen vermogen · Schulden · Voortgang · Gebruikersbeheer
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
<img src="docs/screenshot-dashboard.png" alt="VibeFinance dashboard" width="820">
|
||||
@@ -117,11 +117,12 @@ uitzonderingen nodig. Handige acties:
|
||||
### Testen
|
||||
|
||||
```powershell
|
||||
.\test.ps1 # dependency-check + backend-tests + build + smoketest
|
||||
.\test.ps1 # deps + backend-tests + build + imagescan + smoketest
|
||||
.\test.ps1 -Unit # dependency-check + backend-tests
|
||||
.\test.ps1 -NoSmoke # zonder de stack te starten
|
||||
.\test.ps1 -Strict # faal als een dependency achterloopt
|
||||
.\test.ps1 -NoSmoke # zonder de stack te starten (imagescan draait wél)
|
||||
.\test.ps1 -Strict # faal op achterlopende deps; scan ook op MEDIUM/LOW
|
||||
.\test.ps1 -SkipDeps # dependency-check overslaan (bijv. offline)
|
||||
.\test.ps1 -SkipScan # imagescan overslaan (bijv. offline)
|
||||
```
|
||||
|
||||
Alles loopt in Docker — Node op de host is niet nodig. De backend-tests draaien
|
||||
@@ -141,6 +142,26 @@ backend/package.json (15 dependencies)
|
||||
alles actueel
|
||||
```
|
||||
|
||||
Stap 4 scant het gebouwde image met [Trivy](https://trivy.dev) en blokkeert bij
|
||||
CRITICAL of HIGH waarvoor een fix bestaat. Dat is iets anders dan stap 1: die
|
||||
kijkt naar de `package.json`'s, deze naar wat er daadwerkelijk in het image zit
|
||||
— de Alpine-pakketten en alles wat het base-image meelevert. Dat onderscheid is
|
||||
niet theoretisch. Bij de scan van 1.0.10 kwamen alle 39 bevindingen daarvandaan
|
||||
en geen enkele uit de applicatie zelf:
|
||||
|
||||
| Bron | Aantal | Waar het vandaan kwam |
|
||||
|---|---|---|
|
||||
| `libssl3` + `libcrypto3` | 20 | Alpine in het node-image liep achter op 3.5.8-r0 |
|
||||
| npm's eigen dependencies | 19 | `tar`, `pacote`, `sigstore`, `brace-expansion`, `picomatch`, `ip-address` |
|
||||
|
||||
Een dependency-check had er nul van gezien. Het productie-image doet daarom aan
|
||||
het eind van de build een `apk upgrade` en gooit npm, npx, corepack en yarn
|
||||
eruit: de container start met `node src/server.js` en gebruikt nooit een
|
||||
pakketbeheerder. Dat bracht de scan op nul, en houdt hem daar — npm's
|
||||
dependencies zijn een terugkerende bron die nu simpelweg niet meer in het image
|
||||
zit. `release.ps1` draait dezelfde scan vóór het pushen, dus een image met
|
||||
openstaande CVE's komt de registry niet in.
|
||||
|
||||
### Productie release
|
||||
|
||||
```powershell
|
||||
@@ -171,7 +192,7 @@ build — anders zou de release met een placeholder als notes online komen.
|
||||
| 📉 **Schuld** | Schulden bijhouden per blok met afbetalingsoverzicht |
|
||||
| 📈 **Voortgang Schuld & EV** | Grafieken en trends van EV en schuld over tijd (apart bij te houden) |
|
||||
| 👥 **Gebruikers** | Accounts aanmaken, bewerken en beheren (Admin-rol vereist) |
|
||||
| ⚙️ **Instellingen** | Kleurthema, licht/donker, backup downloaden en backup terugzetten |
|
||||
| ⚙️ **Instellingen** | Kleurthema, licht/donker, backup downloaden, backup terugzetten en export naar HTML |
|
||||
|
||||
De grafiek "Ontwikkeling van Eigen Vermogen" op het dashboard tekent twee lijnen
|
||||
op één as: je netto waarde per voortgangsmoment, en daaronder de cumulatief
|
||||
@@ -209,6 +230,28 @@ downloadt een ZIP (`data.json` + `meta.json`) met je eigen financiële data,
|
||||
"Backup terugzetten" leest zo'n ZIP weer in en schrijft hem via `/api/data` weg.
|
||||
Dat is de gebruikersvariant; een volledige database-dump staat in `BEHEER.md`.
|
||||
|
||||
Daarnaast staat er **"Exporteren naar HTML"**: één zelfdragend bestand met al je
|
||||
gegevens, bedoeld als laatste vangnet. Draait de app niet meer, is de database
|
||||
weg en ligt er geen backup, dan opent dit bestand nog steeds — in elke browser,
|
||||
op een computer zonder internet. Er zit niets van buiten in: de opmaak staat
|
||||
inline, er worden geen lettertypen, afbeeldingen of scripts geladen. Je ziet een
|
||||
samenvatting met de KPI's, eigen vermogen en schulden per categorie met
|
||||
subtotalen, de initiële schuld met wat er sinds de start is afgelost, de
|
||||
voortgangstabel en de historie.
|
||||
|
||||
Alles wat je ooit hebt ingevoerd komt mee, ook wat de app zelf niet meer toont:
|
||||
stortingen op een inmiddels verwijderde categorie krijgen een eigen kolom
|
||||
(`Verwijderd (c9)`). De voortgangstabel is bij zes categorieën twaalf kolommen
|
||||
breed en scrollt horizontaal in plaats van kolommen af te kappen; de datumkolom
|
||||
blijft daarbij staan. Op print vervalt de scrollbalk en wordt de tabel kleiner
|
||||
gezet, zodat alle kolommen op papier alsnog passen.
|
||||
|
||||
Het bestand is tegelijk een backup: onderin staat de complete ruwe data in een
|
||||
`<script type="application/json">`-blok dat de browser niet uitvoert en niet
|
||||
toont. "Backup herstellen" accepteert daarom naast de ZIP ook zo'n HTML-bestand.
|
||||
Eén bestand dat je zowel kunt lézen als kunt terugzetten — zie
|
||||
[`frontend/src/utils/htmlExport.js`](frontend/src/utils/htmlExport.js).
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Architectuur
|
||||
@@ -244,7 +287,7 @@ vibefinance/
|
||||
│ ├── version.js # Draaiende versie (__APP_VERSION__ uit de build)
|
||||
│ ├── constants/ # index.js (kleuren, tabs, begindata), themas.js
|
||||
│ ├── utils/ # format.js (bedragen/datums), storage.js,
|
||||
│ │ # grafiek.js (SVG-padberekening)
|
||||
│ │ # grafiek.js (SVG), htmlExport.js (export)
|
||||
│ ├── hooks/ # useTheme, useUpdateCheck, useKolomBreedtes
|
||||
│ ├── context/ # AppContext (global state + API sync + backup)
|
||||
│ ├── components/
|
||||
@@ -253,7 +296,7 @@ vibefinance/
|
||||
│ │ ├── LoginBackground.jsx
|
||||
│ │ ├── NavBar.jsx
|
||||
│ │ ├── ProfielPopup.jsx
|
||||
│ │ ├── InstellingenModal.jsx # Thema + backup/restore
|
||||
│ │ ├── InstellingenModal.jsx # Thema + backup/restore + export
|
||||
│ │ └── GebruikersBeheer.jsx
|
||||
│ └── pages/
|
||||
│ ├── DashboardTab.jsx
|
||||
|
||||
Reference in New Issue
Block a user