Vergaderlinks herkennen en Jitsi-preflight (#2533) #2580

Merged
brenno merged 1 commit from feat/jitsi-call-01-preflight into main 2026-10-24 17:44:28 +00:00
Owner

Wat dit doet

Eerste stap van de Jitsi-callketen (#2533): de module Videovergaderingen krijgt Vergaderlink controleren — lokale linkherkenning plus een expliciete preflight. Deelnemen is hier nog niet bij (join is een getypeerde UnimplementedError voor #2534).

  • Herkenning is puur lokaal — MeetingLinkResolver normaliseert (fragment/#config.*-overrides, trackingparams en credentials gestript en zichtbaar gemeld), matcht suffix-veilig op bekende Jitsi-hosts en doet nul netwerkverkeer. Een meeting-vormige hint stelt alleen de vraag "welke dienst is dit?" — hij kiest nooit zelf een provider.
  • Goedgekeurde deployments — MeetingProviderProfile bindt providerId aan een exacte origin (geen subdomein-claim), met trustedInternal en cert-pin bewaard.
  • Preflight — achter een knop die eerst de egress-oorsprongen toont: config.js als tekst gelezen via een NetGuard-gepinde fetch (https, of http op letterlijke loopback; geen redirects; bytecap; web faalt dicht), dan een anonieme XMPP-sessie en XEP-0030-discovery van het échte MUC-component in plaats van conference.<domain> te veronderstellen. Resultaat: getypeerde support, capabilities, E2EE-status, anoniem identiteitslabel en diagnosticsDetail.
  • Bugs gevonden door de poorten: een _load/upsert-race en een loading-vlag die nooit terugviel in de profielnotifier.

Testplan

  • 90+ unit-/widgettests (resolver, profielen, config-parser, provider-mapping, XEP-0030, dialog-flow, echte socket-fetch over loopback-HttpServer)
  • make check volledig groen
  • make check-secrets groen (testcredential in allowlist met reden)
  • make sast groen
  • Echte preflight tegen het gepinde testbed: OCIDECK_JITSI_INTEGRATION=1 make test-jitsi-integration — anonieme sessie geopend, muc.meet.jitsi via XEP-0030 ontdekt
  • Twee-browser-probe van het testbed blijft joinen met echte audio na de statische custom-config.js

Generated with Devin

## Wat dit doet Eerste stap van de Jitsi-callketen (#2533): de module *Videovergaderingen* krijgt **Vergaderlink controleren** — lokale linkherkenning plus een expliciete preflight. **Deelnemen is hier nog niet bij** (`join` is een getypeerde `UnimplementedError` voor #2534). - **Herkenning is puur lokaal** — `MeetingLinkResolver` normaliseert (fragment/`#config.*`-overrides, trackingparams en credentials gestript en zichtbaar gemeld), matcht suffix-veilig op bekende Jitsi-hosts en doet **nul** netwerkverkeer. Een meeting-vormige hint stelt alleen de vraag "welke dienst is dit?" — hij kiest nooit zelf een provider. - **Goedgekeurde deployments** — `MeetingProviderProfile` bindt providerId aan een *exacte* origin (geen subdomein-claim), met `trustedInternal` en cert-pin bewaard. - **Preflight** — achter een knop die eerst de egress-oorsprongen toont: `config.js` als *tekst* gelezen via een NetGuard-gepinde fetch (https, of http op letterlijke loopback; geen redirects; bytecap; web faalt dicht), dan een anonieme XMPP-sessie en XEP-0030-discovery van het échte MUC-component in plaats van `conference.<domain>` te veronderstellen. Resultaat: getypeerde support, capabilities, E2EE-status, anoniem identiteitslabel en `diagnosticsDetail`. - **Bugs gevonden door de poorten**: een `_load`/`upsert`-race en een `loading`-vlag die nooit terugviel in de profielnotifier. ## Testplan - [x] 90+ unit-/widgettests (resolver, profielen, config-parser, provider-mapping, XEP-0030, dialog-flow, echte socket-fetch over loopback-HttpServer) - [x] `make check` volledig groen - [x] `make check-secrets` groen (testcredential in allowlist met reden) - [x] `make sast` groen - [x] **Echte preflight tegen het gepinde testbed**: `OCIDECK_JITSI_INTEGRATION=1 make test-jitsi-integration` — anonieme sessie geopend, `muc.meet.jitsi` via XEP-0030 ontdekt - [x] Twee-browser-probe van het testbed blijft joinen met echte audio na de statische `custom-config.js` Generated with [Devin](https://devin.ai)
Eerste stap van de Jitsi-callketen: de module Videovergaderingen krijgt
"Vergaderlink controleren" — lokale herkenning, expliciete preflight,
nog geen deelnemen.

- meeting_link_resolver: pure normalisatie (fragment/#config, tracking en
  credentials gestript), suffix-veilige bekende hosts, geen netwerk.
- meeting_provider_profile: goedgekeurde self-hosted deployments, exacte
  origin, trustedInternal + cert-pin meebewaard.
- providers/jitsi: config.js als tekst gelezen via NetGuard-gepinde fetch
  (https of http op letterlijke loopback, geen redirects, bytecap; web
  faalt dicht), anonieme XMPP-sessie + XEP-0030-discovery van de echte
  MUC-component. join is een getypeerde UnimplementedError voor #2534.
- xmpp_disco: XEP-0030 items/info met IQ-correlatie, findMucComponent.
- meeting_nick: unieke anonieme schermnamen uit een CSPRNG.
- Dialog met consentknop (egress-oorsprongen getoond vóór contact),
  provider-vraag bij hint, interne-server-besluit ook zonder onthouden,
  33 nieuwe strings in alle talen.
- Gated integratietest (OCIDECK_JITSI_INTEGRATION=1, make
  test-jitsi-integration) bewijst de echte preflight tegen het gepinde
  testbed: anonieme sessie, muc.meet.jitsi gevonden. De testbed-config
  declareert daarvoor letterlijke loopback-eindpunten — zoals een echte
  deployment dat ook met literals doet.
- Ook opgeruimd: _load-/upsert-race en een loading-vlag die nooit terug
  viel in de profielnotifier.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit e651a0b332 into main 2026-10-24 17:44:28 +00:00
Sign in to join this conversation.
No description provided.