Commit Graph
2 Commits
Author SHA1 Message Date
kevinveenbirkenbachandClaude Opus 4.7 03ced5c4e1 refactor(web-app-jitsi): split monolithic playwright.spec.js into _shared + test-*.js modules
Matches the zammad layout: `_shared.js` centralises env decode, the
`reachJitsiPrejoin` / `openJitsiSettingsPanel` helpers, the persona
runners, and the `beforeEach` viewport / cookie reset.
`playwright.spec.js` shrinks to a bootstrap that loads `_shared` and
require()s each scenario module's `register(shared)` hook. Each
`test-*.js` owns one persona scenario:

- test-landing.js          — canonical landing + CSP header baseline
- test-guest-persona.js    — guest auth chain (never authenticated)
- test-login-biber.js      — biber OIDC → join room → logout
- test-login-administrator.js — administrator OIDC → settings → logout
- test-login-via-ldap.js   — biber + administrator LDAP-bound scenarios

No spec-level behaviour change: lint-playwright lists the same six
tests and `make test` stays 5/5 green (186 OK).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 20:07:45 +02:00
kevinveenbirkenbachandClaude Opus 4.7 4dcb1e866e feat(web-app-jitsi): add Jitsi Meet role with oauth2-proxy + LDAP variants
Adds the four-container Jitsi Meet stack (web, prosody, jicofo, jvb) with a
3-variant matrix: V1 oauth2-proxy gate + Keycloak LDAP federation, V2
no-auth anonymous, V3 direct prosody mod_auth_ldap2 against svc-db-openldap.

Auth model is oauth2-proxy at the reverse proxy because Jitsi has no
native OIDC adapter — JWT-via-Keycloak would require a custom token
server outside this repo. The role injects a fixed-position
`[data-injected-logout]` button via templates/javascript.js.j2 so the
no-built-in-logout React SPA satisfies the persona contract's
no-direct-URL logout rule. V2/V3 declare PERSONA_BIBER_BLOCKED /
PERSONA_ADMINISTRATOR_BLOCKED because the shared persona helpers only
model the OIDC redirect chain.

Final FULL-matrix `mode=reinstall full_cycle=true` run green across all
three variants (V1: 6/6 pass, V2/V3: 2 pass + 4 blocked skips).

Also lands utils/parse_trace.py — a small zipfile helper used during
the iteration to extract URL traces from playwright .trace bundles.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 12:20:11 +02:00