fix(idaa): require JWT for all Novi users, remove embed meeting button
- Issue JWT to all verified Novi users, not just moderators; unauthenticated URL access no longer sufficient to join an IDAA video conference - Remove 'embedmeeting' from Jitsi toolbar via explicit toolbarButtons whitelist; the embed dialog exposed the Jitsi host/room URL violating IDAA privacy rules Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -836,28 +836,26 @@ async function init_jitsi() {
|
|||||||
const url_params = data.params;
|
const url_params = data.params;
|
||||||
|
|
||||||
// --- Initialize Jitsi ---
|
// --- Initialize Jitsi ---
|
||||||
let jwt_token = null;
|
// All verified Novi users get a JWT — not just moderators.
|
||||||
if (is_moderator) {
|
// Without JWT enforcement, the room URL alone is enough to join, which violates IDAA privacy.
|
||||||
console.log('Jitsi: Attempting to get JWT for moderator...');
|
// is_moderator is encoded in the token payload by get_jitsi_jwt().
|
||||||
jwt_token = await get_jitsi_jwt(
|
console.log('Jitsi: Attempting to get JWT...');
|
||||||
display_name,
|
const jwt_token = await get_jitsi_jwt(
|
||||||
email,
|
display_name,
|
||||||
is_moderator,
|
email,
|
||||||
room_name,
|
is_moderator,
|
||||||
user_id
|
room_name,
|
||||||
);
|
user_id
|
||||||
if (!jwt_token) {
|
);
|
||||||
const container = document.getElementById(jitsi_container_id);
|
if (!jwt_token) {
|
||||||
if (container)
|
const container = document.getElementById(jitsi_container_id);
|
||||||
container.innerHTML =
|
if (container)
|
||||||
'<h1>Authentication Failed. Please try again.</h1>';
|
container.innerHTML =
|
||||||
console.error('Jitsi: Authentication failed. JWT not received.');
|
'<h1>Authentication Failed. Please try again.</h1>';
|
||||||
return;
|
console.error('Jitsi: Authentication failed. JWT not received.');
|
||||||
}
|
return;
|
||||||
console.log('Jitsi: Successfully received JWT.');
|
|
||||||
} else {
|
|
||||||
console.log('Jitsi: Not a moderator, proceeding without JWT.');
|
|
||||||
}
|
}
|
||||||
|
console.log('Jitsi: Successfully received JWT.');
|
||||||
|
|
||||||
const disabled_sounds = [
|
const disabled_sounds = [
|
||||||
disable_incoming_msg_sound ? 'INCOMING_MSG_SOUND' : null,
|
disable_incoming_msg_sound ? 'INCOMING_MSG_SOUND' : null,
|
||||||
@@ -879,7 +877,19 @@ async function init_jitsi() {
|
|||||||
startWithVideoMuted: true,
|
startWithVideoMuted: true,
|
||||||
enableLobby: is_moderator,
|
enableLobby: is_moderator,
|
||||||
disableReactionsModeration: false,
|
disableReactionsModeration: false,
|
||||||
disabledSounds: disabled_sounds
|
disabledSounds: disabled_sounds,
|
||||||
|
// Explicit toolbar whitelist — omitting 'embedmeeting' entirely.
|
||||||
|
// "Embed Meeting" exposes the Jitsi host/room URL and must never appear
|
||||||
|
// for IDAA users (authenticated or not) — privacy requirement.
|
||||||
|
toolbarButtons: [
|
||||||
|
'camera', 'chat', 'closedcaptions', 'desktop', 'download',
|
||||||
|
'etherpad', 'feedback', 'filmstrip', 'fullscreen', 'hangup',
|
||||||
|
'help', 'invite', 'livestreaming', 'microphone',
|
||||||
|
'mute-everyone', 'mute-video-everyone', 'participants-pane',
|
||||||
|
'profile', 'raisehand', 'recording', 'security',
|
||||||
|
'select-background', 'settings', 'shareaudio', 'sharedvideo',
|
||||||
|
'shortcuts', 'stats', 'tileview', 'toggle-camera', 'videoquality'
|
||||||
|
]
|
||||||
},
|
},
|
||||||
interfaceConfigOverwrite: {
|
interfaceConfigOverwrite: {
|
||||||
DISABLE_JOIN_LEAVE_NOTIFICATIONS: true,
|
DISABLE_JOIN_LEAVE_NOTIFICATIONS: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user