146 lines
6.8 KiB
HTML
146 lines
6.8 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Jitsi Meetings iframe API for IDAA</title>
|
|
</head>
|
|
<body>
|
|
<!-- <h1>New Jitsi Meetings for IDAA</h1> -->
|
|
<!-- <p>The URL parameters are passed from the Novi page that contains this as an iframe. This will automatically set the attendees name, email address, moderator status, and room name. The moderator status is based on the Novi UUID. This message will be hidden before going live.</p> -->
|
|
|
|
<div id="jitsi_meet_external_api_container" style="height: 750px; width: 100%"></div>
|
|
<script src="https://jitsi.dgrzone.com/external_api.js"></script>
|
|
|
|
<script lang="ts">
|
|
// Get user info from URL parameters. Generated by the Novi page that contains this iframe.
|
|
let novi_url_params = new URLSearchParams(document.location.search);
|
|
let user_id = novi_url_params.get('uuid');
|
|
let user_full_name = novi_url_params.get('full_name');
|
|
let user_email = novi_url_params.get('email');
|
|
let user_moderator = novi_url_params.get('moderator');
|
|
|
|
// Jitsi Meet External API variables
|
|
let domain = 'jitsi.dgrzone.com';
|
|
let room_name = novi_url_params.get('room') ?? 'the-default-room';
|
|
let display_name = user_full_name ?? 'Not My Name';
|
|
let email = user_email ?? 'test+unknown@oneskyit.com';
|
|
// Replace spaces with plus symbol in email addresses
|
|
email = email.replace(/\s+/g, '+');
|
|
let is_moderator = user_moderator === 'true' || user_moderator === true ? true : false;
|
|
|
|
// Temporarily hard coding moderators:
|
|
// 5724aad7-6d89-47e7-8943-966fd22911bd = Steven L. Klein - Stevenklein425@gmail.com
|
|
// 182d1db3-caa9-41bc-b04a-2facc6859aeb = Melissa Eve Valasky - melissav95@gmail.com
|
|
let novi_jitsi_mod_li = [
|
|
'2b078deb-b4e7-4203-99da-9f7cd62159a5',
|
|
'c9ea07b5-06b0-4a43-a2d0-8d06558c8a82',
|
|
'58db22ee-4b0a-49a7-9f34-53d2ba85a84b',
|
|
'5724aad7-6d89-47e7-8943-966fd22911bd',
|
|
'182d1db3-caa9-41bc-b04a-2facc6859aeb'
|
|
];
|
|
|
|
if (novi_jitsi_mod_li.includes(user_id)) {
|
|
is_moderator = true;
|
|
}
|
|
|
|
// 1. Function to fetch the JWT from your backend
|
|
async function getJitsiJwt() {
|
|
const tokenEndpoint = 'https://api.oneskyit.com/api/jitsi_token';
|
|
|
|
// This payload now correctly separates features, settings, and config overrides.
|
|
// The backend will place these into the correct locations in the JWT.
|
|
const payload = {
|
|
room: room_name,
|
|
name: display_name,
|
|
email: email,
|
|
is_moderator: is_moderator,
|
|
|
|
// 'features': For enabling/disabling major Jitsi tools
|
|
features: {
|
|
livestreaming: false,
|
|
recording: false,
|
|
transcription: false,
|
|
},
|
|
|
|
// 'settings': For moderator default checkboxes in the settings panel
|
|
settings: {
|
|
startMuted: true, // Corresponds to "Everyone starts muted"
|
|
startHidden: true, // Corresponds to "Everyone starts hidden"
|
|
followMe: false, // Corresponds to "Everyone follows me"
|
|
reactionsMuted: true // Corresponds to "Mute reaction sounds for everyone"
|
|
},
|
|
|
|
// 'config': For overriding properties from the server's config.js file
|
|
config: {
|
|
// This disables the reactions feature entirely. If you want reactions to be
|
|
// available but just have the sounds muted by default, set this to 'false'.
|
|
disableReactions: true,
|
|
}
|
|
|
|
};
|
|
|
|
try {
|
|
const response = await fetch(tokenEndpoint, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(payload)
|
|
});
|
|
|
|
if (!response.ok) throw new Error('Failed to fetch JWT token from the server.');
|
|
|
|
const data = await response.json();
|
|
return data.token; // expect { token: "..." }
|
|
} catch (err) {
|
|
console.error('Error getting JWT:', err);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// 2. Main function to initialize the Jitsi API with the JWT
|
|
async function initJitsiApi() {
|
|
let jwtToken = null;
|
|
if (is_moderator) {
|
|
jwtToken = await getJitsiJwt();
|
|
if (!jwtToken) {
|
|
document.getElementById('jitsi_meet_external_api_container').innerHTML =
|
|
'<h1>Authentication Failed. Please try again.</h1>';
|
|
return;
|
|
}
|
|
}
|
|
|
|
const options = {
|
|
roomName: room_name,
|
|
width: '100%',
|
|
height: '100%',
|
|
parentNode: document.getElementById('jitsi_meet_external_api_container'),
|
|
userInfo: { displayName: display_name, email: email },
|
|
|
|
// These settings apply to ALL users. Moderator settings are now in the JWT.
|
|
configOverwrite: {
|
|
prejoinPageEnabled: false,
|
|
startWithAudioMuted: true, // Mutes the local user upon joining
|
|
startWithVideoMuted: true, // Mutes the local user upon joining
|
|
enableLobby: is_moderator,
|
|
},
|
|
|
|
interfaceConfigOverwrite: {
|
|
DISABLE_JOIN_LEAVE_NOTIFICATIONS: true, // suppress join/leave UI notifications/sounds
|
|
// if you want to silence other notification sounds, set any sound URLs to empty:
|
|
NOTIFICATION_SOUND_URL: ''
|
|
},
|
|
|
|
jwt: jwtToken // The JWT will correctly override settings for moderators
|
|
|
|
};
|
|
|
|
const api = new JitsiMeetExternalAPI(domain, options);
|
|
console.log('Jitsi API initialized with options:', options);
|
|
}
|
|
|
|
// 3. Call the initialization function when the page loads
|
|
document.addEventListener('DOMContentLoaded', initJitsiApi);
|
|
</script>
|
|
</body>
|
|
</html>
|