diff --git a/BEHEER.md b/BEHEER.md index ceaea8e..24a95db 100644 --- a/BEHEER.md +++ b/BEHEER.md @@ -96,39 +96,48 @@ docker compose -f docker-compose.dev.yml exec -w /app/frontend app npm run lint ## Tokens -> **De `Vibe`-organisatie staat op public.** Alles wat alleen *leest* heeft -> daardoor geen token meer nodig: `git clone`, `docker compose pull` en de -> update-check van de app werken anoniem. Het host-token hieronder is dus -> optioneel geworden. *Schrijven* blijft geauthenticeerd — een publieke -> organisatie verandert daar niets aan. +**Eén token, op het werkstation.** Dat is genoeg omdat de `Vibe`-organisatie op +public staat: alles wat alleen *leest* heeft geen token meer nodig — `git clone`, +`docker compose pull` en de update-check van de app werken anoniem. Wat overblijft +is schrijven, en dat gebeurt allemaal vanaf deze ene machine. -Twee tokens, gesplitst op machine en op read/write. De grens die iets betekent -ligt tussen werkstation en server, niet tussen push en release: op één machine -kan wie het ene token kan lezen, het andere ook. +| Token | Machine | Scopes | Gebruikt voor | +|---|---|---|---| +| `vibefinance-workstation` | dit werkstation | `write:package`, `write:repository` | `docker push` (`release.ps1`, `dev.ps1 push`) én het aanmaken van de Gitea-release | -| Token | Machine | Scopes | Gebruikt voor | Nog nodig? | -|---|---|---|---|---| -| `vibefinance-workstation` | dit werkstation | `write:package`, `write:repository` | `docker push` (`release.ps1`, `dev.ps1 push`) en het aanmaken van de Gitea-release | **Ja** | -| `vibefinance-host` | de Docker-host | `read:package`, `read:repository` | `docker compose pull` en de update-check van de app | Nee, zolang de organisatie public is | +Er is geen apart host-token en geen apart registry-token: -Aanmaken: Gitea → Settings → Applications → Generate New Token. Doe dat onder een -account dat lid is van de `Vibe`-organisatie: voor schrijven volstaat -organisatie-lidmaatschap niet automatisch, het account moet ook push-rechten op de -repo hebben. +- **`git push`** gaat over SSH (`gitea@…:Vibe/VibeFinance.git`), dus die gebruikt + je SSH-sleutel en niet dit token. +- **De registry** heeft geen eigen variabele nodig: `release.ps1` en `dev.ps1` + vallen bij een ontbrekende `REGISTRY_TOKEN` terug op `GITEA_TOKEN`. Zet alleen + `REGISTRY_USER` erbij, zodat het script zelf kan inloggen als de credential + store leeg is. +- **De Docker-host** hoeft niets meer te hebben: pull en update-check zijn anoniem. -**Waar ze terechtkomen** +Aanmaken: Gitea → Settings → Applications → Generate New Token, met **beide** +scopes aangevinkt. Doe dat onder een account dat push-rechten op de repo heeft — +lid zijn van de organisatie is daarvoor niet automatisch genoeg. Scopes van een +bestaand token zijn later niet aan te passen, dus vink ze in één keer goed aan. -| | Werkstation | Docker-host | -|---|---|---| -| Registry | `docker login` (credential store), of `REGISTRY_USER` + `REGISTRY_TOKEN` in `.env.release` | niets nodig voor een pull; anders `docker login` als de gebruiker die deployt | -| Gitea-API | `GITEA_TOKEN` in `.env.release` | niets nodig; optioneel `UPDATE_CHECK_TOKEN` in `.env` | +**Waar hij terechtkomt** — `.env.release` naast de scripts, niet in git +(`.gitignore` pakt `.env.*`): -**Waarom een host-token read-only blijft** — voor het geval de organisatie weer -privé gaat en je er alsnog één neerzet. Dat staat in platte tekst in `.env` op -een server die de app op poort 3400 publiceert. Met schrijfrechten kan wie bij dat -bestand komt — via de container, een shell op die host, of een backup — een eigen -image als `latest` naar de registry pushen, en die host pullt `latest` zelf. -Read-only houdt je eigen deploy-pad uit de aanvalsketen. +```ini +GITEA_TOKEN= +REGISTRY_USER= +``` + +Een variabele die al in je shell staat wint, zodat je per run kunt afwijken. Een +lege waarde in het bestand wordt overgeslagen. + +**Als de organisatie weer privé gaat** heb je er wél een tweede bij nodig: een +read-only token op de Docker-host, voor `docker compose pull` en +`UPDATE_CHECK_TOKEN`. Houd dat token dan read-only. Het staat in platte tekst in +`.env` op een server die de app op poort 3400 publiceert; met schrijfrechten kan +wie bij dat bestand komt — via de container, een shell op die host, of een +backup — een eigen image als `latest` naar de registry pushen, en die host pullt +`latest` zelf. Read-only houdt je eigen deploy-pad uit de aanvalsketen. ### Wat een foutcode betekent @@ -168,14 +177,21 @@ docker exec vibefinance_app node -e 'const t=process.env.UPDATE_CHECK_TOKEN; fet > waarde helemaal geen header. Nagemeten op 2026-09-10: > geen header `200`, `token ongeldig123` `401`, leeg `200`. -### Tokens opruimen +### Oude tokens opruimen -De lijst onder Settings → Applications heeft een kolom **Last used**. Zet eerst -beide machines om, draai daarna een release en een pull, en kijk een dag later -welke tokens niet meer meebewegen — die kun je intrekken. Betrouwbaarder dan uit -de naam afleiden wat waar in gebruik is. Trek niets in vóór die controle: het -token achter je `docker login` op dit werkstation laat een release op de push -falen. +Nu er één token overblijft, kunnen de rest weg — maar niet op de gok. De lijst +onder Settings → Applications heeft een kolom **Last used**. Werkwijze: + +1. Zet het nieuwe token in `.env.release` en draai een release die helemaal + doorloopt (inclusief `docker push` en stap 5). +2. Kijk in de lijst welk token net **Last used** heeft gekregen. +3. Wacht een dag en trek de tokens in die niet meer meebewegen. + +Betrouwbaarder dan uit de naam afleiden wat waar in gebruik is. Trek vooral niets +in vóór die controle: het token achter je `docker login` zit in de credential +store en niet in een bestand, dus je ziet aan niets welke het is — trek je die +in, dan valt de push in stap 3 om. Loopt dat toch mis, dan is +`docker login vibehoogie.duckdns.org` met het nieuwe token genoeg. --- @@ -222,16 +238,15 @@ in de volgende commit. Staat er een `.env.release` naast `release.ps1`, dan leest het script die in voordat er iets gebeurt, en hoeft stap 3 niet meer met de hand: -``` +```ini # .env.release — staat in .gitignore, hoort alleen op de release-machine GITEA_TOKEN= REGISTRY_USER= -REGISTRY_TOKEN= ``` -Beide tokenvariabelen krijgen hetzelfde token; zie [Tokens](#tokens) voor waarom -dat op deze machine één token mag zijn, en voor wat een 401, 403 of 404 van Gitea -betekent. +`REGISTRY_TOKEN` hoeft er niet in: beide scripts vallen bij een ontbrekende +`REGISTRY_TOKEN` terug op `GITEA_TOKEN`. Zie [Tokens](#tokens) voor de scopes en +voor wat een 401, 403 of 404 van Gitea betekent. Een variabele die al in je shell staat wint, zodat je per run kunt afwijken zonder het bestand aan te passen. Het script logt alleen welke namen het heeft geladen, @@ -430,8 +445,9 @@ machine — `vibefinance-workstation`, zie [Tokens](#tokens). Zonder login faalt een push met `401 Unauthorized`; `release.ps1` en `dev.ps1 push` controleren dit vóór de build en stoppen dan meteen. -Liever niet handmatig inloggen? Zet `REGISTRY_USER` en `REGISTRY_TOKEN` in -`.env.release`, dan logt het script zelf in. +Liever niet handmatig inloggen? Zet `REGISTRY_USER` in `.env.release`, dan logt +het script zelf in met `GITEA_TOKEN` — een aparte `REGISTRY_TOKEN` is alleen +nodig als je daar bewust een ánder token voor wilt gebruiken. Twee valkuilen: log in op `vibehoogie.duckdns.org` **zonder** `:3000` (dat is een aparte sleutel in de credential store), en doe het als dezelfde Windows-gebruiker diff --git a/Changelog.md b/Changelog.md index 0710583..73fd30c 100644 --- a/Changelog.md +++ b/Changelog.md @@ -17,6 +17,11 @@ ondersteunt hem nog als vangnet voor het geval de organisatie weer privé wordt. Schrijven verandert niet: `docker push` en het aanmaken van een release hebben nog steeds het werkstation-token nodig +- Het tweetoken-model in `BEHEER.md` is teruggebracht tot **één** Gitea-token op + het werkstation, met `write:package` en `write:repository`. Het host-token is + niet meer nodig (pull en update-check zijn anoniem), `git push` gaat over SSH, + en `REGISTRY_TOKEN` hoeft niet apart: `release.ps1` en `dev.ps1` vielen daar al + terug op `GITEA_TOKEN`. Geen code-wijziging, alleen minder te beheren - De tabellen op Eigen Vermogen en Voortgang staan op `table-layout: fixed`, nodig om ingestelde kolombreedtes te respecteren. Gevolg: lange tekst rekt een kolom niet meer op maar wordt afgekapt met een ellips. De Opmerkingen-cellen diff --git a/README.md b/README.md index d194193..322f079 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,8 @@ backend/package.json (15 dependencies) ```powershell # token: staat in .env.release, of eenmalig in de shell -$env:GITEA_TOKEN = "" +# één Gitea-token met write:package (push) én write:repository (release) +$env:GITEA_TOKEN = "" .\release.ps1 ``` @@ -298,8 +299,9 @@ Het schema wordt bij het starten van de app aangemaakt/bijgewerkt via ## 🛠️ Beheer Zie `BEHEER.md` voor commando's voor lokale ontwikkeling, releases, logs en -database-toegang — en voor de sectie **Tokens**: welk Gitea-token op welke -machine hoort, met welke scopes, en wat een 401, 403 of 404 van Gitea betekent. +database-toegang — en voor de sectie **Tokens**: waarom één Gitea-token op het +werkstation genoeg is, welke scopes het nodig heeft, en wat een 401, 403 of 404 +van Gitea betekent. ---