Things seems to be working. It pulls the example moderator group list from Novi using their API. The moderator check is working. It still needs to handle more than one Novi Group.
This commit is contained in:
@@ -9,15 +9,6 @@
|
||||
let jitsi_api: any = null;
|
||||
const jitsi_container_id = 'jitsi_meet_external_api_container';
|
||||
|
||||
// Hardcoded moderator list, as in the original HTML file.
|
||||
const 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'
|
||||
];
|
||||
|
||||
async function getJitsiJwt(
|
||||
display_name: string,
|
||||
email: string,
|
||||
@@ -25,7 +16,7 @@
|
||||
room_name: string,
|
||||
user_id: string
|
||||
) {
|
||||
const tokenEndpoint = 'https://dev-api.oneskyit.com/api/jitsi_token';
|
||||
const token_endpoint = 'https://dev-api.oneskyit.com/api/jitsi_token';
|
||||
|
||||
const payload = {
|
||||
name: display_name,
|
||||
@@ -55,7 +46,7 @@
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await fetch(tokenEndpoint, {
|
||||
const response = await fetch(token_endpoint, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(payload)
|
||||
@@ -74,13 +65,83 @@
|
||||
onMount(async () => {
|
||||
const url_params = data.params;
|
||||
|
||||
const user_id = url_params.uuid;
|
||||
const display_name = url_params.full_name ?? 'Guest';
|
||||
// --- Start with fallback data from URL ---
|
||||
let user_id = url_params.uuid;
|
||||
let display_name = url_params.full_name ?? 'Guest';
|
||||
let email = (url_params.email ?? 'guest@example.com').replace(/\s+/g, '+');
|
||||
let is_moderator = false;
|
||||
const room_name = url_params.room ?? 'Default-Room';
|
||||
const domain = url_params.domain ?? 'jitsi.dgrzone.com';
|
||||
const is_moderator = novi_jitsi_mod_li.includes(user_id);
|
||||
|
||||
if (!user_id) {
|
||||
const container = document.getElementById(jitsi_container_id);
|
||||
if (container) {
|
||||
container.innerHTML =
|
||||
'<h1>User ID (uuid) is missing. Cannot start meeting.</h1>';
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// --- Fetch dynamic data from Novi API ---
|
||||
const novi_api_key = 'CmNdWgdPmgluBWjiTd8xsUCk5mio8F1O9DYAh0pVDcg=';
|
||||
const novi_api_headers = new Headers();
|
||||
novi_api_headers.append('Authorization', `Basic ${novi_api_key}`);
|
||||
const requestOptions = {
|
||||
method: 'GET',
|
||||
headers: novi_api_headers
|
||||
};
|
||||
|
||||
try {
|
||||
// Fetch the list of moderators from the Novi group
|
||||
const mod_group_guid = 'd76d2c00-962d-40f6-a2e8-ed9c85594d96';
|
||||
const mod_list_url = `https://www.idaa.org/api/groups/${mod_group_guid}/members?pageSize=200`;
|
||||
console.log(`Fetching moderator list from Novi API: ${mod_list_url}`);
|
||||
const mods_response = await fetch(mod_list_url, requestOptions);
|
||||
|
||||
if (mods_response.ok) {
|
||||
const moderatorsRaw = await mods_response.json();
|
||||
console.log('Fetched moderators raw:', moderatorsRaw);
|
||||
|
||||
// Normalise the payload: support both Array and { Results: Array } shapes
|
||||
let modList: any[] = [];
|
||||
if (Array.isArray(moderatorsRaw)) {
|
||||
modList = moderatorsRaw;
|
||||
} else if (Array.isArray(moderatorsRaw.Results)) {
|
||||
modList = moderatorsRaw.Results;
|
||||
} else if (Array.isArray(moderatorsRaw.Members)) {
|
||||
modList = moderatorsRaw.Members;
|
||||
} else {
|
||||
console.warn('Moderator list format is unexpected. Falling back to empty list.', moderatorsRaw);
|
||||
modList = [];
|
||||
}
|
||||
|
||||
// Build a set of normalized IDs from a few possible fields
|
||||
const modIdSet = new Set(
|
||||
modList
|
||||
.map((m: any) => (m?.UniqueID ?? m?.UniqueId ?? m?.DuesPayerUniqueID ?? m?.id ?? ''))
|
||||
.filter(Boolean)
|
||||
.map((id: string) => id.toLowerCase().trim())
|
||||
);
|
||||
|
||||
const normalizedUserId = String(user_id ?? '').toLowerCase().trim();
|
||||
|
||||
console.log(`Moderator IDs (${modIdSet.size}) sample:`, Array.from(modIdSet).slice(0, 10));
|
||||
if (normalizedUserId && modIdSet.has(normalizedUserId)) {
|
||||
is_moderator = true;
|
||||
console.log(`User ${user_id} is a moderator (matched by UniqueID).`);
|
||||
} else {
|
||||
// Also check by matching name/email if needed (optional)
|
||||
console.log(`User ${user_id} is not a moderator.`);
|
||||
}
|
||||
} else {
|
||||
console.warn('Could not fetch moderator list from Novi API.');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error fetching data from Novi API:', error);
|
||||
// Fallback to data from URL params is the default behavior
|
||||
}
|
||||
|
||||
// --- Initialize Jitsi ---
|
||||
let jwtToken = null;
|
||||
if (is_moderator) {
|
||||
jwtToken = await getJitsiJwt(display_name, email, is_moderator, room_name, user_id);
|
||||
|
||||
@@ -41,12 +41,12 @@
|
||||
|
||||
let { data, children }: Props = $props();
|
||||
|
||||
if (browser) {
|
||||
add_activity_log({
|
||||
action: 'idaa_root_layout',
|
||||
action_with: 'browser'
|
||||
});
|
||||
}
|
||||
// if (browser) {
|
||||
// add_activity_log({
|
||||
// action: 'idaa_root_layout',
|
||||
// action_with: 'browser'
|
||||
// });
|
||||
// }
|
||||
|
||||
function add_activity_log({
|
||||
action = 'idaa_root_layout',
|
||||
|
||||
Reference in New Issue
Block a user