Create config util

This commit is contained in:
Ilya Daynatovich 2017-04-21 13:55:08 +03:00 committed by Lyubo Marinov
parent 32ea2161eb
commit 96b1f0ca74
7 changed files with 100 additions and 87 deletions

View File

@ -1,7 +1,9 @@
/* global config,
createConnectionExternally,
getConfigParamsFromUrl,
getRoomName */
/* global config, createConnectionExternally */
import {
getRoomName,
parseURLParams
} from '../react/features/base/config/functions';
/**
* Implements external connect using createConnectionExternally function defined
@ -15,14 +17,10 @@
* external_connect.js.
*/
const hashParams = getConfigParamsFromUrl('hash', true);
const searchParams = getConfigParamsFromUrl('search', true);
const hashParams = parseURLParams(window.location, true);
// URL params have higher proirity than config params.
let url
= hashParams.hasOwnProperty('config.externalConnectUrl')
? hashParams['config.externalConnectUrl']
: config.externalConnectUrl;
let url = hashParams['config.externalConnectUrl'] || config.externalConnectUrl;
if (url && window.createConnectionExternally) {
const roomName = getRoomName();
@ -30,9 +28,14 @@ if (url && window.createConnectionExternally) {
if (roomName) {
url += `?room=${roomName}`;
const token
= hashParams['config.token'] || config.token || searchParams.jwt;
let token = hashParams['config.token'] || config.token;
if (!token) {
const searchParams
= parseURLParams(window.location, true, 'search');
token = searchParams.jwt;
}
if (token) {
url += `&token=${token}`;
}

View File

@ -127,7 +127,6 @@
'error', loadErrHandler, true /* capture phase type of listener */);
</script>
<script><!--#include virtual="/config.js" --></script><!-- adapt to your needs, i.e. set hosts and bosh path -->
<script src="static/utils.js?v=1"></script>
<!--#include virtual="connection_optimization/connection_optimization.html" -->
<script src="libs/do_external_connect.min.js?v=1"></script>
<script><!--#include virtual="/interface_config.js" --></script>

View File

@ -1,13 +1,13 @@
/* global config, getConfigParamsFromUrl, interfaceConfig, loggingConfig */
/* global config, interfaceConfig, loggingConfig */
const logger = require("jitsi-meet-logger").getLogger(__filename);
var configUtils = require('./Util');
var params = {};
import { getConfigParamsFromUrl } from '../../react/features/base/config';
if (typeof getConfigParamsFromUrl === 'function') {
params = getConfigParamsFromUrl();
}
import configUtils from './Util';
// Parsing config params from URL hash.
const URL_PARAMS = getConfigParamsFromUrl(window.location);
var URLProcessor = {
setConfigParametersFromUrl: function () {
@ -33,7 +33,7 @@ var URLProcessor = {
interfaceConfig: {},
loggingConfig: {}
};
for (var key in params) {
for (var key in URL_PARAMS) {
if (typeof key !== "string") {
logger.warn("Invalid config key: ", key);
continue;
@ -59,7 +59,7 @@ var URLProcessor = {
if (!confObj)
continue;
confObj[confKey] = params[key];
confObj[confKey] = URL_PARAMS[key];
}
configUtils.overrideConfigJSON(
config, interfaceConfig, loggingConfig, configJSON);

View File

@ -1,4 +1,4 @@
/* global getConfigParamsFromUrl, config */
/* global config */
/**
* Parses and handles JWT tokens. Sets config.token.
@ -6,10 +6,12 @@
import * as jws from "jws";
import { getConfigParamsFromUrl } from '../../react/features/base/config';
/**
* Get the JWT token from the URL.
*/
let params = getConfigParamsFromUrl("search", true);
let params = getConfigParamsFromUrl(window.location, true, 'search');
let jwt = params.jwt;
/**

View File

@ -0,0 +1,72 @@
/* @flow */
declare var config: Object;
/**
* Builds and returns the room name.
*
* @returns {string}
*/
export function getRoomName(): ?string {
const { getroomnode } = config;
const path = window.location.pathname;
let roomName;
// Determine the room node from the URL.
if (getroomnode && typeof getroomnode === 'function') {
roomName = getroomnode.call(config, path);
} else {
// Fall back to the default strategy of making assumptions about how the
// URL maps to the room (name). It currently assumes a deployment in
// which the last non-directory component of the path (name) is the
// room.
roomName
= path.substring(path.lastIndexOf('/') + 1).toLowerCase()
|| undefined;
}
return roomName;
}
/**
* Parses the parameters from the URL and returns them as a JS object.
*
* @param {string} url - URL to parse.
* @param {boolean} dontParse - If false or undefined some transformations
* (for parsing the value as JSON) are going to be executed.
* @param {string} source - Values - "hash"/"search" if "search" the parameters
* will parsed from location.search otherwise from location.hash.
* @returns {Object}
*/
export function parseURLParams(
url: URL,
dontParse: boolean = false,
source: string = 'hash'): Object {
const paramStr = source === 'search' ? url.search : url.hash;
const params = {};
// eslint-disable-next-line newline-per-chained-call
paramStr && paramStr.substr(1).split('&').forEach(part => {
const param = part.split('=');
let value;
try {
value = param[1];
if (!dontParse) {
value
= JSON.parse(
decodeURIComponent(param[1]).replace(/\\&/, '&'));
}
} catch (e) {
const msg = `Failed to parse URL parameter value: ${String(value)}`;
console.warn(msg, e);
window.onerror && window.onerror(msg, null, null, null, e);
return;
}
params[param[0]] = value;
});
return params;
}

View File

@ -1,4 +1,5 @@
export * from './actions';
export * from './actionTypes';
export * from './functions';
import './reducer';

View File

@ -1,64 +0,0 @@
/* global config */
/**
* Defines some utility methods that are used before the other JS files are
* loaded.
*/
/**
* Builds and returns the room name.
*/
function getRoomName () { // eslint-disable-line no-unused-vars
var getroomnode = config.getroomnode;
var path = window.location.pathname;
var roomName;
// Determine the room node from the URL.
if (getroomnode && typeof getroomnode === 'function') {
// custom function might be responsible for doing the pushstate
roomName = getroomnode.call(config, path);
} else {
// Fall back to the default strategy of making assumptions about how the
// URL maps to the room (name). It currently assumes a deployment in
// which the last non-directory component of the path (name) is the
// room.
roomName
= path.substring(path.lastIndexOf('/') + 1).toLowerCase()
|| undefined;
}
return roomName;
}
/**
* Parses the parameters from the URL and returns them as a JS object.
* @param source {string} values - "hash"/"search" if "search" the parameters
* will parsed from location.search otherwise from location.hash
* @param dontParse if false or undefined some transformations
* (for parsing the value as JSON) are going to be executed
*/
// eslint-disable-next-line no-unused-vars
function getConfigParamsFromUrl(source, dontParse) {
var paramStr = (source === "search")? location.search : location.hash;
if (!paramStr)
return {};
paramStr = paramStr.substr(1);
var result = {};
paramStr.split("&").forEach(function (part) {
var item = part.split("=");
var value;
try {
value = (dontParse)? item[1] : JSON.parse(
decodeURIComponent(item[1]).replace(/\\&/, "&"));
} catch (e) {
console.warn("Failed to parse URL argument", e);
if(window.onerror)
window.onerror("Failed to parse URL argument", null, null,
null, e);
return;
}
result[item[0]] = value;
});
return result;
}