diff --git a/src/routes/idaa/(idaa)/video_conferences/+page.svelte b/src/routes/idaa/(idaa)/video_conferences/+page.svelte index 0b92815d..3bc912ec 100644 --- a/src/routes/idaa/(idaa)/video_conferences/+page.svelte +++ b/src/routes/idaa/(idaa)/video_conferences/+page.svelte @@ -841,30 +841,33 @@ async function init_jitsi() { const url_params = data.params; // --- Initialize Jitsi --- - // TODO: Issue JWT to all verified Novi users once Jitsi server is configured to enforce - // JWT auth and respect context.user.moderator (set allow_empty_token = false in Prosody). - // For now, only moderators get a JWT — non-moderators join anonymously. - let jwt_token = null; - if (is_moderator) { - console.log('Jitsi: Attempting to get JWT for moderator...'); - jwt_token = await get_jitsi_jwt( - display_name, - email, - is_moderator, - room_name, - user_id - ); - if (!jwt_token) { - const container = document.getElementById(jitsi_container_id); - if (container) - container.innerHTML = - '

Authentication Failed. Please try again.

'; - console.error('Jitsi: Authentication failed. JWT not received.'); - return; - } - console.log('Jitsi: Successfully received JWT.'); - } else { - console.log('Jitsi: Non-moderator joining without JWT (temporary — pending Jitsi server config fix).'); + // Issue JWT to all verified Novi users. The token's moderator flag controls + // whether the user gets host privileges in the Jitsi room. + console.log(`Jitsi: Attempting to get JWT (is_moderator=${is_moderator})...`); + const jwt_token = await get_jitsi_jwt( + display_name, + email, + is_moderator, + room_name, + user_id + ); + if (!jwt_token) { + const container = document.getElementById(jitsi_container_id); + if (container) + container.innerHTML = + '

Authentication Failed. Please try again.

'; + console.error('Jitsi: Authentication failed. JWT not received.'); + return; + } + console.log('Jitsi: Successfully received JWT.'); + try { + // Decode JWT payload (base64url → JSON) for debug verification. + // This does NOT verify the signature — for logging only. + const jwt_payload = JSON.parse(atob(jwt_token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/'))); + console.log('%cJitsi JWT decoded payload:', 'font-weight:bold;color:#4f8ef7', jwt_payload); + console.log(`Jitsi JWT: user=${jwt_payload?.context?.user?.name ?? jwt_payload?.name}, moderator=${jwt_payload?.context?.user?.moderator ?? jwt_payload?.user?.moderator}, room=${jwt_payload?.room ?? jwt_payload?.context?.room}`); + } catch (e) { + console.warn('Jitsi: Could not decode JWT payload for debug logging.', e); } const disabled_sounds = [