Beautify URLProcessor
This commit is contained in:
parent
96b1f0ca74
commit
3af0976a43
|
@ -1,69 +1,93 @@
|
|||
/* global config, interfaceConfig, loggingConfig */
|
||||
|
||||
const logger = require("jitsi-meet-logger").getLogger(__filename);
|
||||
|
||||
import { getConfigParamsFromUrl } from '../../react/features/base/config';
|
||||
import { parseURLParams } from '../../react/features/base/config';
|
||||
|
||||
import configUtils from './Util';
|
||||
|
||||
// Parsing config params from URL hash.
|
||||
const URL_PARAMS = getConfigParamsFromUrl(window.location);
|
||||
const logger = require("jitsi-meet-logger").getLogger(__filename);
|
||||
|
||||
var URLProcessor = {
|
||||
setConfigParametersFromUrl: function () {
|
||||
// Convert 'params' to JSON object
|
||||
// We have:
|
||||
// {
|
||||
// "config.disableAudioLevels": false,
|
||||
// "config.channelLastN": -1,
|
||||
// "interfaceConfig.APP_NAME": "Jitsi Meet"
|
||||
// }
|
||||
// We want to have:
|
||||
// {
|
||||
// "config": {
|
||||
// "disableAudioLevels": false,
|
||||
// "channelLastN": -1
|
||||
// },
|
||||
// interfaceConfig: {
|
||||
// APP_NAME: "Jitsi Meet"
|
||||
// }
|
||||
// }
|
||||
var configJSON = {
|
||||
config: {},
|
||||
interfaceConfig: {},
|
||||
loggingConfig: {}
|
||||
};
|
||||
for (var key in URL_PARAMS) {
|
||||
if (typeof key !== "string") {
|
||||
logger.warn("Invalid config key: ", key);
|
||||
continue;
|
||||
}
|
||||
var confObj = null, confKey;
|
||||
if (key.indexOf("config.") === 0) {
|
||||
/**
|
||||
* URL params with this prefix should be merged to config.
|
||||
*/
|
||||
const CONFIG_PREFIX = 'config.';
|
||||
|
||||
/**
|
||||
* URL params with this prefix should be merged to interface config.
|
||||
*/
|
||||
const INTERFACE_CONFIG_PREFIX = 'interfaceConfig.';
|
||||
|
||||
/**
|
||||
* Config keys to be ignored.
|
||||
*
|
||||
* @type Set
|
||||
*/
|
||||
const KEYS_TO_IGNORE = new Set([
|
||||
'analyticsScriptUrls',
|
||||
'callStatsCustomScriptUrl'
|
||||
]);
|
||||
|
||||
/**
|
||||
* URL params with this prefix should be merged to logging config.
|
||||
*/
|
||||
const LOGGING_CONFIG_PREFIX = 'loggingConfig.';
|
||||
|
||||
/**
|
||||
* Convert 'URL_PARAMS' to JSON object
|
||||
* We have:
|
||||
* {
|
||||
* "config.disableAudioLevels": false,
|
||||
* "config.channelLastN": -1,
|
||||
* "interfaceConfig.APP_NAME": "Jitsi Meet"
|
||||
* }
|
||||
* We want to have:
|
||||
* {
|
||||
* "config": {
|
||||
* "disableAudioLevels": false,
|
||||
* "channelLastN": -1
|
||||
* },
|
||||
* interfaceConfig: {
|
||||
* "APP_NAME": "Jitsi Meet"
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
export function setConfigParametersFromUrl() {
|
||||
// Parsing config params from URL hash.
|
||||
const params = parseURLParams(window.location);
|
||||
|
||||
const configJSON = {
|
||||
config: {},
|
||||
interfaceConfig: {},
|
||||
loggingConfig: {}
|
||||
};
|
||||
|
||||
for (const key in params) {
|
||||
if (typeof key === 'string') {
|
||||
let confObj = null;
|
||||
let confKey;
|
||||
|
||||
if (key.indexOf(CONFIG_PREFIX) === 0) {
|
||||
confObj = configJSON.config;
|
||||
confKey = key.substr("config.".length);
|
||||
confKey = key.substr(CONFIG_PREFIX.length);
|
||||
|
||||
// prevent passing some parameters which can inject scripts
|
||||
if (confKey === 'analyticsScriptUrls'
|
||||
|| confKey === 'callStatsCustomScriptUrl')
|
||||
continue;
|
||||
|
||||
} else if (key.indexOf("interfaceConfig.") === 0) {
|
||||
} else if (key.indexOf(INTERFACE_CONFIG_PREFIX) === 0) {
|
||||
confObj = configJSON.interfaceConfig;
|
||||
confKey = key.substr("interfaceConfig.".length);
|
||||
} else if (key.indexOf("loggingConfig.") === 0) {
|
||||
confKey
|
||||
= key.substr(INTERFACE_CONFIG_PREFIX.length);
|
||||
} else if (key.indexOf(LOGGING_CONFIG_PREFIX) === 0) {
|
||||
confObj = configJSON.loggingConfig;
|
||||
confKey = key.substr("loggingConfig.".length);
|
||||
confKey = key.substr(LOGGING_CONFIG_PREFIX.length);
|
||||
}
|
||||
|
||||
if (!confObj)
|
||||
continue;
|
||||
|
||||
confObj[confKey] = URL_PARAMS[key];
|
||||
// prevent passing some parameters which can inject scripts
|
||||
if (confObj && !KEYS_TO_IGNORE.has(confKey)) {
|
||||
confObj[confKey] = params[key];
|
||||
}
|
||||
} else {
|
||||
logger.warn('Invalid config key: ', key);
|
||||
}
|
||||
configUtils.overrideConfigJSON(
|
||||
config, interfaceConfig, loggingConfig, configJSON);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = URLProcessor;
|
||||
configUtils.overrideConfigJSON(
|
||||
config, interfaceConfig, loggingConfig,
|
||||
configJSON);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import { loadScript } from '../../base/util';
|
||||
|
||||
import URLProcessor from '../../../../modules/config/URLProcessor';
|
||||
import {
|
||||
setConfigParametersFromUrl
|
||||
} from '../../../../modules/config/URLProcessor';
|
||||
|
||||
import JitsiMeetJS from './_';
|
||||
|
||||
|
@ -44,7 +46,7 @@ export function loadConfig(host: string, path: string = '/config.js') {
|
|||
// but URLProcessor still deals with the global variables config,
|
||||
// interfaceConfig, and loggingConfig and loadConfig. As the latter will
|
||||
// surely change in the future, so will the former then.
|
||||
URLProcessor.setConfigParametersFromUrl();
|
||||
setConfigParametersFromUrl();
|
||||
|
||||
return Promise.resolve(window.config);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue