Het ontwerp van de limiter en de pagina, en de limiter is klein
createRelay uit @evolu/nodejs neemt twee terugroepfuncties, isOwnerAllowed en isOwnerWithinQuota, en Trezor doet in createEvoluRelay.ts zelf niets anders. Hun hele quota-manager met Postgres bestaat alleen om de tabel te vullen die die twee raadplegen. Wij vullen ze met eigen logica en bouwen niets na. Weg 1 uit Bereikbaarheid 4b is daarmee veel goedkoper dan daar aangenomen, en dat is wat de keuze van de gebruiker mogelijk maakt. De logica zoals hij hem formuleerde: de eerste eigenaar die zich meldt wint, een schakelaar bepaalt of er nog nieuwe bij mogen, en data is per eigenaar te wissen. Dat laatste doet het relay-proces zelf, aangestuurd met een vlagbestand vanaf de pagina; geen tweede container die langszij in de SQLite schrijft en geen Docker-socket. Twee feiten uit de broncode van Evolu die het ontwerp sturen en die in de naslag staan met bron. De gepubliceerde image zet isOwnerWithinQuota op 1 MB per eigenaar en laat isOwnerAllowed weg, dus een kale relay is niet volledig ongelimiteerd, maar dat plafond geldt ook voor de echte gebruiker. En de relay-URL van de client bevat een pad dat letterlijk wordt overgenomen, wat een goedkope proxy-controle mogelijk maakt; die is bewust niet genomen nu de allowlist er komt. De poorten gaan om: pagina achter app_proxy met de inlog aan, relay op een eigen gepubliceerde poort waar Zoraxy met TLS naartoe wijst. Dat lost open punt 2 op zonder het bezwaar dat daar stond, en het volgt het patroon dat Electrum Gate in deze repo al gebruikt. De pagina volgt hetzelfde ontwerpsysteem, zonder de Google Fonts-verwijzing eruit. Open punt 8 en 2 zijn beslist, fase 5 staat als takenlijst. De gebruiker heeft de oude installatie van de Umbrel gehaald; er wordt niet geupdatet maar opnieuw gebouwd. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -82,13 +82,32 @@
|
||||
proxy met een eigen domein is wat Electrum Gate al doet. Beide veranderen dit van "een vlag omzetten" in
|
||||
een eigen ontwerpvraag.
|
||||
|
||||
**Richting van de gebruiker, 28-08-2026:** een certificaat op een eigen subdomein, en Zoraxy dat die
|
||||
naam doorzet naar de relay op de interne poort. Dat is dezelfde weg die Electrum Gate al gebruikt, dus
|
||||
het is bekend terrein en geen nieuw bouwwerk. Twee dingen die daarbij vastliggen:
|
||||
|
||||
- **Zoraxy moet de WebSocket-upgrade doorlaten.** Dit is geen gewone HTTP-site; alles loopt over één
|
||||
opgewaardeerde verbinding, en bij de meeste reverse proxies is dat een schakelaar per host. Staat die
|
||||
uit, dan lijkt het beeld op dat van vanochtend: een server die leeft en een cliënt die niets doet. De
|
||||
handshake-curl uit [PLAN.md](PLAN.md) §6a stap 3 is dan de test, met de publieke naam in plaats van
|
||||
het IP;
|
||||
- **TLS lost punt 8 niet op, het maakt het dringender.** Een certificaat regelt versleuteling en
|
||||
waarschijnlijk iOS, maar niet wie er mag schrijven. Achter een publieke naam is de kale relay vanaf
|
||||
het internet bereikbaar zonder enige toegangscontrole. De kale relay op een LAN is iets anders dan de
|
||||
kale relay op een publiek subdomein.
|
||||
|
||||
**Goedkoopste volgende meting, en die kost niets:** op de telefoon controleren of de synchronisatie
|
||||
überhaupt aangaat en of het apparaat om een bevestiging vraagt. Is het antwoord nee, dan is TLS niet de
|
||||
verdachte en zou een certificaat niets opgelost hebben.
|
||||
**Moment:** nadat de verbouwing staat; de desktop werkt en dat is genoeg om verder te bouwen ·
|
||||
**Eigenaar:** gebruiker
|
||||
|
||||
8. **Welke limiter komt er op de kale relay?**
|
||||
8. **Welke limiter komt er op de kale relay?** - **beslist op 28-08-2026: weg 1, de relay uitbreiden via
|
||||
`createRelay`.** Het ontwerp staat in [PLAN.md](PLAN.md) §4g en bleek veel kleiner dan hieronder
|
||||
aangenomen: het zijn twee terugroepfuncties en geen eigen relay. De gebruiker breidde het uit met een
|
||||
schakelaar voor nieuwe eigenaars en het wissen van data per eigenaar. Het geheime pad uit de vierde weg
|
||||
is bewust niet genomen. De rest van dit punt blijft staan als onderbouwing tot de verbouwing er is.
|
||||
|
||||
Nieuw op 27-08-2026, uit de richting in punt 6. Dit is de vraag die met "kaal gaan" meekomt en die je
|
||||
niet kunt uitstellen tot na de verbouwing, want hij bepaalt of er een eigen image nodig blijft.
|
||||
|
||||
@@ -134,7 +153,11 @@
|
||||
**Moment:** als fase 4 helemaal af is, dus als bewezen is dat er iets te delen valt · **Eigenaar:**
|
||||
gebruiker
|
||||
|
||||
2. **Komt er een statuspagina?**
|
||||
2. **Komt er een statuspagina?** - **beslist op 28-08-2026: ja, en achter de umbrelOS-inlog.** De
|
||||
poortindeling gaat om: de pagina komt op de app-proxy mét inlog, de relay op een eigen gepubliceerde
|
||||
poort waar Zoraxy naartoe wijst. Daarmee vervalt het bezwaar hieronder, want de pagina ligt dan wél
|
||||
achter een grens. Zie [PLAN.md](PLAN.md) §4h.
|
||||
|
||||
Electrum Gate heeft er een en die bleek in de praktijk het nuttigste deel van die app. Hier zou dat
|
||||
kunnen: draait de relay, hoe groot is de database, wanneer was de laatste synchronisatie, en is er een
|
||||
eigenaar geregistreerd. Dat laatste is meer dan gemak, want het is precies waar het stil kan misgaan.
|
||||
|
||||
@@ -33,6 +33,12 @@ Alles hieronder rust op [Upstream-evolu-relay.md](../../../Referenties/Upstream-
|
||||
feiten met bron-URL per stuk staan. De vorm van een Umbrel-app staat in
|
||||
[Umbrel-appstore-spec.md](../../../Referenties/Umbrel-appstore-spec.md).
|
||||
|
||||
> **Let op de tweedeling in deze paragraaf.** §4a tot en met §4f beschrijven het pakket **zoals het op
|
||||
> 25-08-2026 gebouwd is**, met de relay van Trezor, een Postgres en de quota-manager. Dat pakket gaat eruit:
|
||||
> de proef van 28-08 (§6a) bewees dat de kale Evolu-relay werkt, en §4g en §4h beschrijven wat ervoor in de
|
||||
> plaats komt. De oude paragrafen blijven staan tot de verbouwing gedaan is, want ze leggen uit waaróm er
|
||||
> iets weggaat; daarna verdwijnen ze.
|
||||
|
||||
### 4a. Drie containers, twee images
|
||||
|
||||
De relay en de quota-manager komen uit **dezelfde** image met een ander `command`: bovenstrooms is het één
|
||||
@@ -111,6 +117,70 @@ Voorlopig blijft die tag lokaal, op verzoek van de gebruiker: dat is de kortste
|
||||
die je kunt proberen. Compose haalt niets op zolang de image lokaal bestaat, dus dezelfde regel werkt later
|
||||
ook als de tag naar een register wijst. Waar dat register komt te staan is [OPEN.md](OPEN.md) punt 1.
|
||||
|
||||
### 4g. De limiter is niet een eigen relay maar twee functies
|
||||
|
||||
Beslist op 28-08-2026 door de gebruiker, na de geslaagde proef. De feiten met bron staan in
|
||||
[Upstream-evolu-relay.md](../../../Referenties/Upstream-evolu-relay.md) §8.
|
||||
|
||||
`createRelay` uit `@evolu/nodejs` neemt twee terugroepfuncties: `isOwnerAllowed(ownerId)` en
|
||||
`isOwnerWithinQuota(ownerId, requiredBytes)`. **Trezor doet precies dit en niets meer**; hun hele
|
||||
quota-manager met Postgres bestaat alleen om de tabel te vullen die die twee functies raadplegen. Wij
|
||||
vullen ze met eigen logica en houden verder alles van bovenstrooms. Er wordt dus **geen relay nagebouwd en
|
||||
niets van Evolu aangepast**.
|
||||
|
||||
De logica die erin komt, zoals de gebruiker hem formuleerde:
|
||||
|
||||
- **de eerste eigenaar die zich meldt, wordt de eigenaar.** Geen id intikken, want Suite toont je `OwnerId`
|
||||
nergens;
|
||||
- **een schakelaar die bepaalt of er nog nieuwe eigenaars bij mogen.** Dit is wat de leer-variant bruikbaar
|
||||
maakt in een huishouden: openzetten, tweede apparaat koppelen, weer dichtzetten;
|
||||
- **data per eigenaar wissen**, zodat een verkeerd geleerde eigenaar geen herinstallatie kost.
|
||||
|
||||
**De prijs die we hiermee accepteren:** de bouwstap en het eigen register komen terug, want dit vraagt een
|
||||
eigen image. Wat níet terugkomt is de Postgres, het wachtwoord en het onderhoud aan andermans schema. Het
|
||||
bouwrecept in `tools/evolu-relay/` blijft dus bestaan, maar het bouwt straks niet meer de repo van Trezor;
|
||||
het bouwt een klein eigen programma tegen `@evolu/nodejs`.
|
||||
|
||||
**Twee dingen om niet over te slaan.** De gepubliceerde image zet `isOwnerWithinQuota` op **1 MB per
|
||||
eigenaar** en laat `isOwnerAllowed` weg. Nemen wij die grens over zonder erbij na te denken, dan stopt het
|
||||
synchroniseren zodra de labelgeschiedenis daar tegenaan loopt, en dat merk je pas als het gebeurt. En de
|
||||
allowlist is **staat**: die hoort onder `${APP_DATA_DIR}/data/`, naast de relay-database en niet erin.
|
||||
|
||||
**Wat er bewust níet in gaat: een geheim pad in de URL.** De cliënt neemt een pad in de relay-URL letterlijk
|
||||
over, dus Zoraxy had alleen een onraadbaar pad kunnen doorlaten. Dat is een laag vóór de relay in plaats van
|
||||
erin, en het is met één proxyregel alsnog toe te voegen. De gebruiker ziet er geen reden voor nu de
|
||||
allowlist er komt, en dat klopt: het beschermt tegen hetzelfde, alleen eerder in de keten.
|
||||
|
||||
### 4h. De poorten omgedraaid: pagina achter de inlog, relay ernaast
|
||||
|
||||
Beslist op 28-08-2026, en het draait §4c om. Daar stond de relay achter de app-proxy met de inlog uit, en
|
||||
dat maakte een statuspagina onmogelijk zonder die pagina net zo bloot te leggen.
|
||||
|
||||
De nieuwe indeling volgt het patroon dat Electrum Gate in deze repo al gebruikt:
|
||||
|
||||
- **de pagina achter `app_proxy`, met de umbrelOS-inlog gewoon aan.** Dat is de app-tegel op het dashboard;
|
||||
- **de relay op een eigen `ports:`-regel**, waar Zoraxy met TLS op een eigen subdomein naartoe wijst.
|
||||
|
||||
Suite ziet daarmee nooit een inlogpagina en de pagina is nooit onbeschermd. Dat lost open punt 2 op zonder
|
||||
de tweede poort die daar als bezwaar stond, want die tweede poort is er toch al.
|
||||
|
||||
**Zoraxy moet de WebSocket-upgrade doorlaten**, anders lijkt het beeld op dat van 28-08: een server die
|
||||
leeft en een cliënt die niets doet. De handshake-curl uit §6a stap 3 is de test.
|
||||
|
||||
**De pagina volgt hetzelfde ontwerpsysteem als Electrum Gate**, aangewezen door de gebruiker op
|
||||
28-08-2026: `HomeGit/Docs/website-design-system.html`. Dat is geen kwestie van smaak maar van herkenning,
|
||||
want de twee apps staan straks naast elkaar op hetzelfde dashboard. Electrum Gate neemt die tokens
|
||||
letterlijk over (`data-theme` maal `data-accent`, dezelfde accentkleur) en dat is het vertrekpunt. **Eén
|
||||
ding niet overnemen uit het bronbestand: de verwijzing naar Google Fonts.** De pagina van Electrum Gate
|
||||
heeft die bewust niet, en een app op een Umbrel hoort niet stuk te gaan of te vertragen op een lettertype
|
||||
dat van buiten moet komen.
|
||||
|
||||
**De pagina praat niet met Docker.** Dezelfde regel als bij Electrum Gate: geen socket. De pagina en het
|
||||
relay-proces delen een map onder `${APP_DATA_DIR}/data/`, en een knop op de pagina zet daar een vlagbestand
|
||||
neer dat het relay-proces oppakt. Dat geldt zowel voor de schakelaar als voor het wissen: het wissen raakt
|
||||
de SQLite van de relay, en dat hoort het proces te doen dat die database bezit, niet een tweede container
|
||||
die er langszij in schrijft.
|
||||
|
||||
## 5. Raakvlakken
|
||||
|
||||
- **Proefopstelling** leverde alle feiten waarop §4 rust, en heeft nog twee open vragen die dit plan raken:
|
||||
|
||||
@@ -20,7 +20,13 @@ daar wel, valideert op `http(s)://` en onthoudt zijn waarde, maar de app doet ge
|
||||
verbindingspoging. Het vermoeden is TLS; dat is niet gemeten en het is duur, want een certificaat voor een
|
||||
LAN-adres bestaat niet.
|
||||
|
||||
**Geraakt:** alleen documentatie van dit plan. **Tests:** niet van toepassing.
|
||||
**Het ontwerp van de limiter en de pagina staat er ook**, en de limiter bleek veel kleiner dan
|
||||
**Bereikbaarheid** §4b aannam: `createRelay` neemt twee terugroepfuncties, en Trezor doet zelf niets
|
||||
anders. De poorten gaan om, zodat de pagina achter de umbrelOS-inlog kan en Zoraxy met TLS naar de relay
|
||||
wijst. De gebruiker heeft de oude installatie weggehaald; die wordt niet geüpdatet maar opnieuw gebouwd.
|
||||
|
||||
**Geraakt:** documentatie van dit plan plus `Referenties/Upstream-evolu-relay.md` §8. **Tests:** niet van
|
||||
toepassing.
|
||||
|
||||
## 27-08-2026 - richting gekozen: kaal, met een limiter en een pagina erop
|
||||
|
||||
|
||||
@@ -26,27 +26,46 @@
|
||||
Nu de desktop bewijst dat de relay in orde is, is dit een schone vraag geworden: het ligt aan de app
|
||||
of aan het platform, niet aan ons. Zonder antwoord werkt de app alleen op de desktop, en dat scheelt
|
||||
voor de waarde van dit hele plan
|
||||
- [ ] **Pas daarna beslissen wat er met het huidige pakket gebeurt.** Werkt de kale relay, dan wordt dit
|
||||
één container op een gepubliceerde image en vervallen de Postgres en het wachtwoord. Werkt hij niet,
|
||||
dan is de limietenrij met de hand zetten de enige weg vooruit
|
||||
- [x] **Besloten wat er met het huidige pakket gebeurt (28-08-2026): het gaat eruit.** De relay van Trezor,
|
||||
de quota-manager en de Postgres vervallen. Wat ervoor in de plaats komt staat in [PLAN.md](PLAN.md)
|
||||
§4g en §4h
|
||||
- [x] **De limiter gekozen (28-08-2026): weg 1, uitbreiden via `createRelay`.** Dat bleek veel kleiner dan
|
||||
**Bereikbaarheid** §4b aannam: het zijn twee terugroepfuncties, `isOwnerAllowed` en
|
||||
`isOwnerWithinQuota`, en Trezor doet zelf niets anders. De gebruiker breidde het ontwerp uit met een
|
||||
schakelaar voor nieuwe eigenaars en met wissen per eigenaar. Zie [OPEN.md](OPEN.md) punt 8
|
||||
- [x] **De vraag of het databaseschema zichzelf aanmaakt is vervallen.** Hij ging over het pakket dat eruit
|
||||
gaat, en de kale relay maakt zijn database bij de start zelf aan; dat is op 28-08-2026 gezien
|
||||
|
||||
**De richting is al gekozen op 27-08-2026: kaal, met een eigen limiter erop en de statuspagina
|
||||
erbij.** Zie [OPEN.md](OPEN.md) punt 6, 8 en 2. Wat daarbij vastligt en makkelijk verkeerd onthouden
|
||||
wordt: de kale relay heeft géén toegangscontrole, dus de limiter is geen extraatje maar de vervanging
|
||||
van de enige bescherming die er vandaag is. En de quota-manager die er nu in zit is daarvoor niet te
|
||||
hergebruiken: die schrijft in Trezor's limietentabel, en die tabel bestaat straks niet meer
|
||||
## Fase 5 - De verbouwing naar de kale relay
|
||||
|
||||
**Een eigen image blijft daardoor waarschijnlijk nodig**, want de meest voor de hand liggende limiter
|
||||
breidt de relay uit via `createRelay`. Dat is geen obstakel: de gebruiker meldde op 27-08-2026 dat de
|
||||
broncode nog op zijn Umbrel staat, dus opnieuw bouwen en naar het eigen Gitea-register duwen kan
|
||||
gewoon. De bouwstap en het register vervallen dus mogelijk tóch niet; de Postgres en het wachtwoord
|
||||
wel
|
||||
Nog niets van begonnen. De volgorde is bewust: eerst het programma dat de limiter draagt, dan de app
|
||||
eromheen, want de compose hangt af van wat dat programma nodig heeft.
|
||||
|
||||
- [ ] **De limiter kiezen uit de drie wegen van Bereikbaarheid §4b**, met de leer-variant erbij: de eerste
|
||||
eigenaar die verbindt wordt toegelaten, de rest geweigerd, met een wisknop op de statuspagina. Zie
|
||||
[OPEN.md](OPEN.md) punt 8. **Pas nadat de proef geslaagd is**
|
||||
- [ ] **In de logs van de relay kijken of het databaseschema zichzelf aanmaakt.** Alleen nog nuttig als het
|
||||
huidige pakket blijft: `sudo docker logs whatsnext-evolu-relay_relay_1`
|
||||
- [ ] **Het eigen relay-programma schrijven.** Een klein Node-project dat `createRelay` uit `@evolu/nodejs`
|
||||
aanroept met onze twee functies. Niets van Evolu aanpassen en niets nabouwen. Zie [PLAN.md](PLAN.md)
|
||||
§4g en [Upstream-evolu-relay.md](../../../Referenties/Upstream-evolu-relay.md) §8
|
||||
- [ ] **Bewust een getal kiezen voor `isOwnerWithinQuota`.** De gepubliceerde image staat op 1 MB per
|
||||
eigenaar. Overnemen zonder nadenken betekent dat het synchroniseren stilvalt zodra de
|
||||
labelgeschiedenis daar tegenaan loopt
|
||||
- [ ] **De allowlist als staat onder `${APP_DATA_DIR}/data/`**, naast de relay-database en niet erin, met
|
||||
een `.gitkeep` voor de map
|
||||
- [ ] **Wissen per eigenaar laten doen door het relay-proces zelf**, aangestuurd met een vlagbestand vanaf
|
||||
de pagina. Geen tweede container die langszij in de SQLite schrijft, en geen Docker-socket
|
||||
- [ ] **`tools/evolu-relay/build.sh` omschrijven:** niet meer de repo van Trezor bouwen maar het eigen
|
||||
programma. De pin blijft, en met de pin mee gaat `version` in het manifest omhoog
|
||||
- [ ] **De compose omzetten:** pagina achter `app_proxy` met de inlog aan, relay op een eigen `ports:`.
|
||||
Postgres, wachtwoord en quota-manager eruit. Zie [PLAN.md](PLAN.md) §4h
|
||||
- [ ] **De statuspagina bouwen**, met de pagina en de agent van Electrum Gate als vertrekpunt en met
|
||||
hetzelfde ontwerpsysteem (`HomeGit/Docs/website-design-system.html`), maar zonder de Google
|
||||
Fonts-verwijzing daaruit. Toont of de relay draait, welke eigenaars bekend en toegelaten zijn, de
|
||||
omvang van de database en het laatste schrijfmoment. Draagt de schakelaar voor nieuwe eigenaars en de
|
||||
wisknop per eigenaar
|
||||
- [ ] **De app opnieuw installeren in plaats van updaten.** De gebruiker heeft de oude installatie op
|
||||
28-08-2026 weggehaald; dat is ook de nette weg, want niet elk bestand bereikt een bestaande
|
||||
installatie via een update
|
||||
- [ ] **Zoraxy inrichten** op het eigen subdomein met TLS, doorverwijzend naar de relay-poort, met de
|
||||
WebSocket-upgrade aan. Testen met de handshake-curl uit [PLAN.md](PLAN.md) §6a stap 3, met de
|
||||
publieke naam in plaats van het IP. **Eigenaar: gebruiker**
|
||||
|
||||
## Fase 1 - De app-map
|
||||
|
||||
|
||||
Reference in New Issue
Block a user