| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | 
							- /* global APP, JitsiMeetJS, config */
 - 
 - import AuthHandler from './modules/UI/authentication/AuthHandler';
 - import jitsiLocalStorage from './modules/util/JitsiLocalStorage';
 - 
 - import {
 -     connectionEstablished,
 -     connectionFailed
 - } from './react/features/base/connection';
 - import {
 -     isFatalJitsiConnectionError,
 -     JitsiConnectionErrors,
 -     JitsiConnectionEvents
 - } from './react/features/base/lib-jitsi-meet';
 - 
 - const logger = require('jitsi-meet-logger').getLogger(__filename);
 - 
 - /**
 -  * Checks if we have data to use attach instead of connect. If we have the data
 -  * executes attach otherwise check if we have to wait for the data. If we have
 -  * to wait for the attach data we are setting handler to APP.connect.handler
 -  * which is going to be called when the attach data is received otherwise
 -  * executes connect.
 -  *
 -  * @param {string} [id] user id
 -  * @param {string} [password] password
 -  * @param {string} [roomName] the name of the conference.
 -  */
 - function checkForAttachParametersAndConnect(id, password, connection) {
 -     if (window.XMPPAttachInfo) {
 -         APP.connect.status = 'connecting';
 - 
 -         // When connection optimization is not deployed or enabled the default
 -         // value will be window.XMPPAttachInfo.status = "error"
 -         // If the connection optimization is deployed and enabled and there is
 -         // a failure the value will be window.XMPPAttachInfo.status = "error"
 -         if (window.XMPPAttachInfo.status === 'error') {
 -             connection.connect({
 -                 id,
 -                 password
 -             });
 - 
 -             return;
 -         }
 - 
 -         const attachOptions = window.XMPPAttachInfo.data;
 - 
 -         if (attachOptions) {
 -             connection.attach(attachOptions);
 -             delete window.XMPPAttachInfo.data;
 -         } else {
 -             connection.connect({
 -                 id,
 -                 password
 -             });
 -         }
 -     } else {
 -         APP.connect.status = 'ready';
 -         APP.connect.handler
 -             = checkForAttachParametersAndConnect.bind(
 -                 null,
 -                 id, password, connection);
 -     }
 - }
 - 
 - /**
 -  * Try to open connection using provided credentials.
 -  * @param {string} [id]
 -  * @param {string} [password]
 -  * @param {string} [roomName]
 -  * @returns {Promise<JitsiConnection>} connection if
 -  * everything is ok, else error.
 -  */
 - function connect(id, password, roomName) {
 -     const connectionConfig = Object.assign({}, config);
 -     const { issuer, jwt } = APP.store.getState()['features/base/jwt'];
 - 
 -     connectionConfig.bosh += `?room=${roomName}`;
 - 
 -     const connection
 -         = new JitsiMeetJS.JitsiConnection(
 -             null,
 -             jwt && issuer && issuer !== 'anonymous' ? jwt : undefined,
 -             connectionConfig);
 - 
 -     return new Promise((resolve, reject) => {
 -         connection.addEventListener(
 -             JitsiConnectionEvents.CONNECTION_ESTABLISHED,
 -             handleConnectionEstablished);
 -         connection.addEventListener(
 -             JitsiConnectionEvents.CONNECTION_FAILED,
 -             handleConnectionFailed);
 -         connection.addEventListener(
 -             JitsiConnectionEvents.CONNECTION_FAILED,
 -             connectionFailedHandler);
 - 
 -         /**
 -          *
 -          */
 -         function connectionFailedHandler(error, message, credentials) {
 -             APP.store.dispatch(
 -                 connectionFailed(connection, error, message, credentials));
 - 
 -             if (isFatalJitsiConnectionError(error)) {
 -                 connection.removeEventListener(
 -                     JitsiConnectionEvents.CONNECTION_FAILED,
 -                     connectionFailedHandler);
 -             }
 -         }
 - 
 -         /**
 -          *
 -          */
 -         function unsubscribe() {
 -             connection.removeEventListener(
 -                 JitsiConnectionEvents.CONNECTION_ESTABLISHED,
 -                 handleConnectionEstablished);
 -             connection.removeEventListener(
 -                 JitsiConnectionEvents.CONNECTION_FAILED,
 -                 handleConnectionFailed);
 -         }
 - 
 -         /**
 -          *
 -          */
 -         function handleConnectionEstablished() {
 -             APP.store.dispatch(connectionEstablished(connection));
 -             unsubscribe();
 -             resolve(connection);
 -         }
 - 
 -         /**
 -          *
 -          */
 -         function handleConnectionFailed(err) {
 -             unsubscribe();
 -             logger.error('CONNECTION FAILED:', err);
 -             reject(err);
 -         }
 - 
 -         checkForAttachParametersAndConnect(id, password, connection);
 -     });
 - }
 - 
 - /**
 -  * Open JitsiConnection using provided credentials.
 -  * If retry option is true it will show auth dialog on PASSWORD_REQUIRED error.
 -  *
 -  * @param {object} options
 -  * @param {string} [options.id]
 -  * @param {string} [options.password]
 -  * @param {string} [options.roomName]
 -  * @param {boolean} [retry] if we should show auth dialog
 -  * on PASSWORD_REQUIRED error.
 -  *
 -  * @returns {Promise<JitsiConnection>}
 -  */
 - export function openConnection({ id, password, retry, roomName }) {
 -     const usernameOverride
 -         = jitsiLocalStorage.getItem('xmpp_username_override');
 -     const passwordOverride
 -         = jitsiLocalStorage.getItem('xmpp_password_override');
 - 
 -     if (usernameOverride && usernameOverride.length > 0) {
 -         id = usernameOverride; // eslint-disable-line no-param-reassign
 -     }
 -     if (passwordOverride && passwordOverride.length > 0) {
 -         password = passwordOverride; // eslint-disable-line no-param-reassign
 -     }
 - 
 -     return connect(id, password, roomName).catch(err => {
 -         if (retry) {
 -             const { issuer, jwt } = APP.store.getState()['features/base/jwt'];
 - 
 -             if (err === JitsiConnectionErrors.PASSWORD_REQUIRED
 -                     && (!jwt || issuer === 'anonymous')) {
 -                 return AuthHandler.requestAuth(roomName, connect);
 -             }
 -         }
 - 
 -         throw err;
 -     });
 - }
 
 
  |