From 4b95a5d6cb98b379895b8e0c16603ac052f4e708 Mon Sep 17 00:00:00 2001 From: Horatiu Muresan <39557534+horymury@users.noreply.github.com> Date: Tue, 8 Mar 2022 16:57:53 +0200 Subject: [PATCH] fix(language) Add lang API option - jwt from API overwrites any jwt sent as queryparam - `defaultLanguage` from configOverwrite converts to `lang` query param --- config.js | 2 +- modules/API/external/external_api.js | 10 ++++++-- react/features/base/config/configWhitelist.js | 1 - react/features/base/util/uri.js | 24 ++++++++++++------- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/config.js b/config.js index 67127187a..0f9747d7b 100644 --- a/config.js +++ b/config.js @@ -516,7 +516,7 @@ var config = { // Hides the dominant speaker name badge that hovers above the toolbox // hideDominantSpeakerBadge: false, - // Default language for the user interface. + // Default language for the user interface. Cannot be overwritten. // defaultLanguage: 'en', // Disables profile and the edit of all fields from the profile settings (display name and email) diff --git a/modules/API/external/external_api.js b/modules/API/external/external_api.js index 46a62368d..88d7d09e0 100644 --- a/modules/API/external/external_api.js +++ b/modules/API/external/external_api.js @@ -170,6 +170,7 @@ function changeParticipantNumber(APIInstance, number) { * configuration options defined in interface_config.js to be overridden. * @param {string} [options.jwt] - The JWT token if needed by jitsi-meet for * authentication. + * @param {string} [options.lang] - The meeting's default language. * @param {string} [options.roomName] - The name of the room to join. * @returns {string} The URL. */ @@ -208,7 +209,8 @@ function parseArguments(args) { configOverwrite, interfaceConfigOverwrite, jwt, - onload + onload, + lang ] = args; return { @@ -219,7 +221,8 @@ function parseArguments(args) { configOverwrite, interfaceConfigOverwrite, jwt, - onload + onload, + lang }; } case 'object': // new arguments format @@ -280,6 +283,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter { * configuration options defined in interface_config.js to be overridden. * @param {string} [options.jwt] - The JWT token if needed by jitsi-meet for * authentication. + * @param {string} [options.lang] - The meeting's default language. * @param {string} [options.onload] - The onload function that will listen * for iframe onload event. * @param {Array} [options.invitees] - Array of objects containing @@ -301,6 +305,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter { configOverwrite = {}, interfaceConfigOverwrite = {}, jwt = undefined, + lang = undefined, onload = undefined, invitees, devices, @@ -314,6 +319,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter { configOverwrite, interfaceConfigOverwrite, jwt, + lang, roomName, devices, userInfo, diff --git a/react/features/base/config/configWhitelist.js b/react/features/base/config/configWhitelist.js index 982adf133..deebb0824 100644 --- a/react/features/base/config/configWhitelist.js +++ b/react/features/base/config/configWhitelist.js @@ -81,7 +81,6 @@ export default [ 'brandingRoomAlias', 'debug', 'debugAudioLevels', - 'defaultLanguage', 'defaultLocalDisplayName', 'defaultRemoteDisplayName', 'desktopSharingFrameRate', diff --git a/react/features/base/util/uri.js b/react/features/base/util/uri.js index 9ab604b17..4672c20be 100644 --- a/react/features/base/util/uri.js +++ b/react/features/base/util/uri.js @@ -523,19 +523,25 @@ export function urlObjectToString(o: Object): ?string { // query/search - // Web's ExternalAPI jwt - const { jwt } = o; + // Web's ExternalAPI jwt and lang + const { jwt, lang } = o; + + const search = new URLSearchParams(url.search); if (jwt) { - let { search } = url; + search.set('jwt', jwt); + } - if (search.indexOf('?jwt=') === -1 && search.indexOf('&jwt=') === -1) { - search.startsWith('?') || (search = `?${search}`); - search.length === 1 || (search += '&'); - search += `jwt=${jwt}`; + const { defaultLanguage } = o.configOverwrite || {}; - url.search = search; - } + if (lang || defaultLanguage) { + search.set('lang', lang || defaultLanguage); + } + + const searchString = search.toString(); + + if (searchString) { + url.search = `?${searchString}`; } // fragment/hash