123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import { isRoomValid } from '../base/conference';
- import { RouteRegistry } from '../base/navigator';
- import { Conference } from '../conference';
- import { WelcomePage } from '../welcome';
-
- /**
- * Gets room name and domain from URL object.
- *
- * @param {URL} url - URL object.
- * @private
- * @returns {{
- * domain: (string|undefined),
- * room: (string|undefined)
- * }}
- */
- function _getRoomAndDomainFromUrlObject(url) {
- let domain;
- let room;
-
- if (url) {
- domain = url.hostname;
- room = url.pathname.substr(1).toLowerCase();
-
- // Convert empty string to undefined to simplify checks.
- if (room === '') {
- room = undefined;
- }
- if (domain === '') {
- domain = undefined;
- }
- }
-
- return {
- domain,
- room
- };
- }
-
- /**
- * Gets conference room name and connection domain from URL.
- *
- * @param {(string|undefined)} url - URL.
- * @returns {{
- * domain: (string|undefined),
- * room: (string|undefined)
- * }}
- */
- export function _getRoomAndDomainFromUrlString(url) {
- // Rewrite the specified URL in order to handle special cases such as
- // hipchat.com and enso.me which do not follow the common pattern of most
- // Jitsi Meet deployments.
- if (typeof url === 'string') {
- // hipchat.com
- let regex = /^(https?):\/\/hipchat.com\/video\/call\//gi;
- let match = regex.exec(url);
-
- if (!match) {
- // enso.me
- regex = /^(https?):\/\/enso\.me\/(?:call|meeting)\//gi;
- match = regex.exec(url);
- }
- if (match && match.length > 1) {
- /* eslint-disable no-param-reassign, prefer-template */
-
- url
- = match[1] /* URL protocol */
- + '://enso.hipchat.me/'
- + url.substring(regex.lastIndex);
-
- /* eslint-enable no-param-reassign, prefer-template */
- }
- }
-
- return _getRoomAndDomainFromUrlObject(_urlStringToObject(url));
- }
-
- /**
- * Determines which route is to be rendered in order to depict a specific Redux
- * store.
- *
- * @param {(Object|Function)} stateOrGetState - Redux state or Regux getState()
- * method.
- * @returns {Route}
- */
- export function _getRouteToRender(stateOrGetState) {
- const state
- = typeof stateOrGetState === 'function'
- ? stateOrGetState()
- : stateOrGetState;
- const room = state['features/base/conference'].room;
- const component = isRoomValid(room) ? Conference : WelcomePage;
-
- return RouteRegistry.getRouteByComponent(component);
- }
-
- /**
- * Parses a string into a URL (object).
- *
- * @param {(string|undefined)} url - The URL to parse.
- * @private
- * @returns {URL}
- */
- function _urlStringToObject(url) {
- let urlObj;
-
- if (url) {
- try {
- urlObj = new URL(url);
- } catch (ex) {
- // The return value will signal the failure & the logged
- // exception will provide the details to the developers.
- console.log(`${url} seems to be not a valid URL, but it's OK`, ex);
- }
- }
-
- return urlObj;
- }
|