• v1.0.11 Stable

    jhoogie released this 2026-09-18 13:40:28 +02:00 | 15 commits to main since this release

    Beveiliging

    • PostgreSQL 18.4 → 18.6. Het postgres:18-alpine image dat in gebruik was
      dateerde van vier maanden geleden. Dat is een patch binnen dezelfde major, dus
      de data-directory blijft geldig en er komt geen dump/restore aan te pas — het
      volume blijft gewoon staan. De kwetsbaarhedenscan op het image gaat van 143
      naar 45 bevindingen, het grootste deel in de Alpine-pakketten eronder. Wat
      overblijft (1 kritiek, 21 hoog) zit allemaal in Go's stdlib v1.24.6 in een
      meegecompileerde binary; dat kan alleen upstream oplossen
    • BEHEER.md beschreef alleen de major-upgrade, met een docker compose down -v erin. Wie dat bij een patch-upgrade zou volgen, wist zijn database zonder
      dat het nodig is. De twee gevallen staan nu apart beschreven
    • De imagescan staat op nul. De scan van 1.0.10 gaf 39 bevindingen
      (1 kritiek, 12 hoog, 15 middel, 11 laag). Geen enkele kwam uit deze
      applicatie: twintig zaten in libssl3 en libcrypto3 (Alpine in het
      node-image liep achter op 3.5.8-r0) en negentien in de dependencies die npm
      zelf meelevert — tar, pacote, sigstore, brace-expansion, picomatch,
      ip-address. De eigen ip-address van de app stond al op 10.7.0 en was dus
      nooit het probleem
    • Het productie-image doet nu een apk upgrade aan het eind van de build. Het
      node-image wordt minder vaak herbouwd dan Alpine patches uitbrengt, dus
      OpenSSL loopt er structureel op achter
    • npm, npx, corepack en yarn gaan uit het productie-image. De container start
      met node src/server.js en gebruikt nooit een pakketbeheerder; ze zaten er
      alleen in omdat het base-image ze meelevert. Weg met de tool is weg met die
      hele categorie, ook bij de volgende ronde — npm's dependencies zijn een
      terugkerende bron van meldingen
    • Nieuwe teststap [4/5] Imagescan met Trivy, die het gebouwde image scant en
      faalt op CRITICAL of HIGH waarvoor een fix bestaat (--ignore-unfixed, want
      een CVE zonder patch hoort je release niet te blokkeren). -Strict trekt de
      lat naar MEDIUM en LOW, -SkipScan slaat hem over. Stap 1 kijkt naar de
      package.json's en had geen van deze 39 gezien; deze kijkt naar wat er
      werkelijk in het image zit. release.ps1 draait dezelfde scan vóór het
      pushen, dus een image met openstaande CVE's komt de registry niet meer in

    Toegevoegd

    • Export naar HTML. Onder Instellingen staat naast backup en restore nu
      "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 is dit bestand nog steeds te openen — in elke browser, op een
      computer zonder internet. Er zit niets van buiten in: opmaak staat inline,
      geen lettertypen, geen afbeeldingen, geen scripts
    • De pagina toont een samenvatting met de KPI's, en daaronder eigen vermogen en
      schulden per categorie met subtotalen en een eindtotaal, de voortgangstabel
      met verschil per moment, en de historie van EV en schuld. Bedragen staan met
      twee decimalen — anders dan het scherm, want dit is een archiefstuk waar de
      exacte waarde in hoort — rechts uitgelijnd met cijfers van gelijke breedte
    • 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 nu naast de ZIP ook zo'n
      HTML-bestand. Eén bestand dat je zowel kunt lezen als kunt terugzetten
    • Uitvoer wordt zowel als HTML als binnen het JSON-blok ge-escaped. Een post die
      Fonds <A> & co heet, of een </script> in de gegevens, sloopt de pagina
      niet en breekt de ingebakken backup niet open
    • Nieuwe utils/htmlExport.js, met leesHtmlBackup voor de weg terug. Die
      gebruikt DOMParser en geen reguliere expressie: de gegevens kunnen van alles
      bevatten, en een parser die HTML echt begrijpt trapt daar niet in. Geen nieuwe
      dependency
    • De voortgangstabel is Datum plus één kolom per categorie plus vier vaste
      kolommen — bij zes categorieën twaalf stuks, en die passen op geen enkel
      scherm. De tabellen scrollen daarom horizontaal in plaats van kolommen buiten
      beeld te laten vallen. De datumkolom blijft daarbij staan, want zonder die
      kolom weet je niet meer naar welk moment je kijkt, en een schaduwrandje
      verschijnt aan de kant waar nog inhoud zit. Dat laatste is een CSS-truc met
      meeschuivende achtergronden: de pagina mag geen scripts bevatten, maar zonder
      hint ziet niemand dat er rechts meer staat. Op print vervalt het allemaal en
      wordt de tabel kleiner gezet, zodat alle kolommen op papier alsnog meekomen
    • De initiële schuld stond wel in de gegevens maar niet op de pagina. Hij
      hoort niet bij een schuldblok, dus zonder eigen regel viel hij buiten de
      export. Staat er nu onder de schuldentabel, met "afgelost sinds start" erbij
    • Stortingen op een verwijderde categorie blijven in oude voortgangsrijen
      staan, maar de app toont alleen kolommen van bestaande categorieën — die
      bedragen waren dus nergens meer te zien. De export geeft ze alsnog een kolom,
      gemerkt als Verwijderd (c9). Voor een bestand dat alles moet bewaren wat je
      ooit hebt ingevoerd is stil weglaten het verkeerde gedrag
    Downloads