feat(forms): Uitnodiging openen… — een formulier ophalen en toetsen (fase 4, stap 3) #2256
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!2256
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/intake-client"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat
Fase 4, stap 3, en de eerste die een invuller ziet: Uitnodiging openen… op het startscherm. De eigenaar koos de client eerst (de server wacht op D3), tegen een inzendserver in het geheugen.
PinnedIntakeHttp): alleenhttps, alleen de poorten 80/443/8080/8443, de host doorNetGuard.safeResolve— nietsafeResolveTrusted: het adres staat in een uitnodiging, dus in invoer van buiten, en mag nooit een intern adres bereiken —, de socket gepind aan dat adres, geen redirects, geenUser-Agent, een body met zijnContent-Length. Elke mislukking is een waarde (IntakeHttpFailure) zonder URL, body of kop. Op het web weigert de stub (if (dart.library.js_interop), niethtml: onder wasm kiest die stil de stub).IntakeClient.openInvitation:GET /v1/info(te oud, te nieuw of geen inzendserver), het formulier, en dan elke bundel tegen de vingerafdruk uit de link, het adres uit de link en de pins. Een variant die niet slaagt valt af; slaagt er geen, dan noemt de weigering de reden van de eerste. Eerlijk bevonden onderweg: toetst men de bundels van verschillende talen achter elkaar tegen oplopende pins, dan weigert een lagere reeks zichzelf — daarom toetst elke bundel tegen de pins van vóór het antwoord, en worden de pins daarna het hoogste van wat slaagde. En: zou een publicatie varianten met verschillendebundle_seqdragen, dan weigert wie de hoogste zag de lagere bij een volgend bezoek.INTAKE_PROTOCOL.md§5.3 zegt nu dat één publicatie éénbundle_seqdraagt (de server weigert anders metbundle-invalid; de organisator tekent bij publiceren alle talen opnieuw).FormInvitationDialog): de link plakken (van het klembord als hij op een uitnodiging lijkt), het adres in beeld vóór het verzoek — de tik op Formulier ophalen is het "ja" —, en erna de naam van de organisator uit de ondertekende bundel, met de vingerafdruk onder Details. Een taalkeuze bij meer dan één taal (voorgekozen op de taal van het programma); geen weg verder voor een formulier dat de server gesloten noemt of waarvan de bundel een verstreken laatste dag noemt. Een link zonder vingerafdruk gaat niet verder, met zijn eigen zin. Voor iedereen op een computer, niet achter de uitbreiding voor formulieren: een invuller heeft die niet.openFormInvitation): bewaart de pins, zet het geheugen van de invulpagina klaar (het gepubliceerde formulier, de bundel en de vingerafdruk) en opent het sjabloon als nieuw document — het opslaan van de inzending, ook verzegeld, vraagt dan om geen bestand en geen vingerafdruk.form_bundle_issue_text.dart) voor de bestandsroute én de uitnodiging;hostMismatchheeft een eigen zin.Server: {host}, overal gelijk gelaten, ook waar de taal een ander woord heeft): die staat nu in alle 30 talen goed en in de Engelse uitzonderingenlijst.Getoetst
IntakeClienttegenFakeIntakeServer(eenIntakeHttpin het geheugen die de routes uit de kern gebruikt, niet een tweede lezing van het document): wat er gevraagd wordt en in welke volgorde, elke reden waarom een bundel niet wordt geloofd (andere vingerafdruk, ander sjabloon, ander adres, verlopen, terugval, ander formulier), elke weigering van de server (te oud/nieuw, geen inzendserver, een code, een proxy-pagina,Retry-Aftertot de grens van een dag, geen UTF-8), elkeIntakeHttpFailure, het plafond voor het formulier, de tijd die de HTTP-laag krijgt, een poort in het adres.NetGuarddraait op een publiek adres): alles wat vóór een socket wordt geweigerd (schema, poort, begrenzing, intern adres, naam die nergens op uitkomt), en onderweg status/koppen/bytes, geenUser-Agent, een body met zijn lengte en niet in stukken, een redirect die niet wordt gevolgd, te groot, een antwoord precies op de grens, te traag, een afgebroken verbinding.maxResponseBytes <= 0), het geforceerd sluiten van een verbinding (een test die op elke uitkomst slaagde), een klembord dat laat komt, het venster dat niet door ernaast tikken sluit, de voorgekozen taal — en twee die dood waren (een annuleervlag naastmounted, een beginwaarde die direct werd overschreven): die zijn geschrapt.make check(ongepiped, exit 0) liep over de boom vóór de hernoeming van één testconstante (kTestToken→kTestInvite: gitleaks lastokenplus een waarde met entropie als lek, ook in de historie, dus de commits zijn herschreven); daarna draaiden de betrokken tests,check-static,check-registrations,check-secrets(gitleaks + trufflehog, alle refs),sastencheck-packagesopnieuw: groen. De tak loopt niet achter op main.Wat er nog niet is
Het versturen (acceptatiedialoog, upload, aankomstbewijs, outbox), de kant van de organisator (publiceren naar een server, binnenhalen, token), de server zelf en de webinvuller.