Files
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

39 lines
1.0 KiB
Python

import re
import sys
import zipfile
p = sys.argv[1]
z = zipfile.ZipFile(p)
print("==== files in trace ====")
for n in z.namelist():
if n.endswith((".trace", ".network")):
print(n, z.getinfo(n).file_size)
print()
print("==== url-like strings from 0-trace.network (first 50) ====")
if "0-trace.network" in z.namelist():
n = z.read("0-trace.network").decode(errors="replace")
seen = set()
for m in re.finditer(r'https?://[^\s"\\]+', n):
u = m.group(0).rstrip('",:;)')
if u not in seen:
seen.add(u)
if len(seen) >= 50:
break
for u in sorted(seen):
print(u)
print()
print("==== url-like strings from 0-trace.trace (first 50) ====")
if "0-trace.trace" in z.namelist():
n = z.read("0-trace.trace").decode(errors="replace")
seen = set()
for m in re.finditer(r'https?://[^\s"\\]+', n):
u = m.group(0).rstrip('",:;)')
if u not in seen:
seen.add(u)
if len(seen) >= 50:
break
for u in sorted(seen):
print(u)