122 lines
3.4 KiB
JavaScript
122 lines
3.4 KiB
JavaScript
/* global JitsiMeetJS, APP */
|
|
|
|
import LoginDialog from './UI/authentication/LoginDialog';
|
|
import UIEvents from '../service/UI/UIEvents';
|
|
import UIUtil from './UI/util/UIUtil';
|
|
import {openConnection} from './connection';
|
|
|
|
const ConferenceEvents = JitsiMeetJS.events.conference;
|
|
|
|
let externalAuthWindow;
|
|
let authRequiredDialog;
|
|
|
|
function doExternalAuth (room, lockPassword) {
|
|
if (externalAuthWindow) {
|
|
externalAuthWindow.focus();
|
|
return;
|
|
}
|
|
if (room.isJoined()) {
|
|
room.getExternalAuthUrl(true).then(function (url) {
|
|
externalAuthWindow = LoginDialog.showExternalAuthDialog(
|
|
url,
|
|
function () {
|
|
externalAuthWindow = null;
|
|
room.join(lockPassword);
|
|
}
|
|
);
|
|
});
|
|
} else {
|
|
// If conference has not been started yet
|
|
// then redirect to login page
|
|
room.getExternalAuthUrl().then(UIUtil.redirect);
|
|
}
|
|
}
|
|
|
|
function doXmppAuth (room, lockPassword) {
|
|
let loginDialog = LoginDialog.showAuthDialog(function (id, password) {
|
|
// auth "on the fly":
|
|
// 1. open new connection with proper id and password
|
|
// 2. connect to the room
|
|
// (this will store sessionId in the localStorage)
|
|
// 3. close new connection
|
|
// 4. reallocate focus in current room
|
|
openConnection({id, password}).then(function (connection) {
|
|
// open room
|
|
let newRoom = connection.initJitsiConference(room.getName());
|
|
|
|
loginDialog.displayConnectionStatus(
|
|
APP.translation.translateString('connection.FETCH_SESSION_ID')
|
|
);
|
|
|
|
newRoom.room.moderator.authenticate().then(function () {
|
|
connection.disconnect();
|
|
|
|
loginDialog.displayConnectionStatus(
|
|
APP.translation.translateString('connection.GOT_SESSION_ID')
|
|
);
|
|
|
|
if (room.isJoined()) {
|
|
// just reallocate focus if already joined
|
|
room.room.moderator.allocateConferenceFocus();
|
|
} else {
|
|
// or join
|
|
room.join(lockPassword);
|
|
}
|
|
|
|
loginDialog.close();
|
|
}).catch(function (error, code) {
|
|
connection.disconnect();
|
|
|
|
console.error('Auth on the fly failed', error);
|
|
|
|
let errorMsg = APP.translation.translateString(
|
|
'connection.GET_SESSION_ID_ERROR'
|
|
);
|
|
|
|
loginDialog.displayError(errorMsg + code);
|
|
});
|
|
}, function (err) {
|
|
loginDialog.displayError(err);
|
|
});
|
|
}, function () { // user canceled
|
|
loginDialog.close();
|
|
});
|
|
}
|
|
|
|
function authenticate (room, lockPassword) {
|
|
if (room.isExternalAuthEnabled()) {
|
|
doExternalAuth(room, lockPassword);
|
|
} else {
|
|
doXmppAuth();
|
|
}
|
|
}
|
|
|
|
function requireAuth(roomName) {
|
|
if (authRequiredDialog) {
|
|
return;
|
|
}
|
|
|
|
authRequiredDialog = LoginDialog.showAuthRequiredDialog(
|
|
roomName, authenticate
|
|
);
|
|
}
|
|
|
|
function closeAuth() {
|
|
if (externalAuthWindow) {
|
|
externalAuthWindow.close();
|
|
externalAuthWindow = null;
|
|
}
|
|
|
|
if (authRequiredDialog) {
|
|
authRequiredDialog.close();
|
|
authRequiredDialog = null;
|
|
}
|
|
}
|
|
|
|
|
|
export default {
|
|
authenticate,
|
|
requireAuth,
|
|
closeAuth
|
|
};
|