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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user