2016-10-21 17:11:22 +00:00
|
|
|
/* global $, APP, config */
|
2015-03-13 14:01:42 +00:00
|
|
|
|
2016-01-15 14:59:35 +00:00
|
|
|
/**
|
|
|
|
* Build html for "password required" dialog.
|
|
|
|
* @returns {string} html string
|
|
|
|
*/
|
2015-12-17 15:31:11 +00:00
|
|
|
function getPasswordInputHtml() {
|
|
|
|
let placeholder = config.hosts.authdomain
|
|
|
|
? "user identity"
|
|
|
|
: "user@domain.net";
|
2016-10-12 12:33:07 +00:00
|
|
|
|
2015-12-17 15:31:11 +00:00
|
|
|
return `
|
2016-10-12 12:33:07 +00:00
|
|
|
<input name="username" type="text"
|
|
|
|
class="input-control__input"
|
|
|
|
placeholder=${placeholder} autofocus>
|
2015-12-17 15:31:11 +00:00
|
|
|
<input name="password" type="password"
|
2016-10-12 12:33:07 +00:00
|
|
|
class="input-control__input"
|
2016-10-21 18:17:17 +00:00
|
|
|
data-i18n="[placeholder]dialog.userPassword">`;
|
2015-12-18 17:54:15 +00:00
|
|
|
}
|
|
|
|
|
2016-01-15 14:59:35 +00:00
|
|
|
/**
|
|
|
|
* Convert provided id to jid if it's not jid yet.
|
|
|
|
* @param {string} id user id or jid
|
|
|
|
* @returns {string} jid
|
|
|
|
*/
|
2015-12-18 17:54:15 +00:00
|
|
|
function toJid(id) {
|
|
|
|
if (id.indexOf("@") >= 0) {
|
|
|
|
return id;
|
|
|
|
}
|
|
|
|
|
|
|
|
let jid = id.concat('@');
|
|
|
|
if (config.hosts.authdomain) {
|
|
|
|
jid += config.hosts.authdomain;
|
|
|
|
} else {
|
|
|
|
jid += config.hosts.domain;
|
|
|
|
}
|
|
|
|
|
|
|
|
return jid;
|
|
|
|
}
|
|
|
|
|
2016-01-15 14:59:35 +00:00
|
|
|
/**
|
|
|
|
* Generate cancel button config for the dialog.
|
|
|
|
* @returns {Object}
|
|
|
|
*/
|
2015-12-18 17:54:15 +00:00
|
|
|
function cancelButton() {
|
|
|
|
return {
|
|
|
|
title: APP.translation.generateTranslationHTML("dialog.Cancel"),
|
|
|
|
value: false
|
|
|
|
};
|
2015-12-17 15:31:11 +00:00
|
|
|
}
|
2015-03-13 14:01:42 +00:00
|
|
|
|
2016-01-15 14:59:35 +00:00
|
|
|
/**
|
|
|
|
* Auth dialog for JitsiConnection which supports retries.
|
|
|
|
* If no cancelCallback provided then there will be
|
|
|
|
* no cancel button on the dialog.
|
|
|
|
*
|
|
|
|
* @class LoginDialog
|
|
|
|
* @constructor
|
|
|
|
*
|
|
|
|
* @param {function(jid, password)} successCallback
|
|
|
|
* @param {function} [cancelCallback] callback to invoke if user canceled.
|
|
|
|
*/
|
|
|
|
function LoginDialog(successCallback, cancelCallback) {
|
2015-12-18 17:54:15 +00:00
|
|
|
let loginButtons = [{
|
|
|
|
title: APP.translation.generateTranslationHTML("dialog.Ok"),
|
|
|
|
value: true
|
|
|
|
}];
|
|
|
|
let finishedButtons = [{
|
2016-10-21 17:11:22 +00:00
|
|
|
title: APP.translation.generateTranslationHTML('dialog.retry'),
|
2015-12-18 17:54:15 +00:00
|
|
|
value: 'retry'
|
|
|
|
}];
|
|
|
|
|
|
|
|
// show "cancel" button only if cancelCallback provided
|
|
|
|
if (cancelCallback) {
|
|
|
|
loginButtons.push(cancelButton());
|
|
|
|
finishedButtons.push(cancelButton());
|
|
|
|
}
|
|
|
|
|
2015-12-17 15:31:11 +00:00
|
|
|
const states = {
|
2015-03-13 14:01:42 +00:00
|
|
|
login: {
|
2016-10-21 18:17:17 +00:00
|
|
|
titleKey: 'dialog.passwordRequired',
|
2015-12-17 15:31:11 +00:00
|
|
|
html: getPasswordInputHtml(),
|
2015-12-18 17:54:15 +00:00
|
|
|
buttons: loginButtons,
|
2015-03-13 14:01:42 +00:00
|
|
|
focus: ':input:first',
|
|
|
|
submit: function (e, v, m, f) {
|
|
|
|
e.preventDefault();
|
|
|
|
if (v) {
|
2015-12-17 15:31:11 +00:00
|
|
|
let jid = f.username;
|
|
|
|
let password = f.password;
|
2015-03-13 14:01:42 +00:00
|
|
|
if (jid && password) {
|
|
|
|
connDialog.goToState('connecting');
|
2015-12-18 17:54:15 +00:00
|
|
|
successCallback(toJid(jid), password);
|
2015-03-13 14:01:42 +00:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// User cancelled
|
2015-12-15 12:09:44 +00:00
|
|
|
cancelCallback();
|
2015-03-13 14:01:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
connecting: {
|
2016-10-17 23:14:38 +00:00
|
|
|
titleKey: 'dialog.connecting',
|
2015-03-13 14:01:42 +00:00
|
|
|
html: '<div id="connectionStatus"></div>',
|
|
|
|
buttons: [],
|
|
|
|
defaultButton: 0
|
|
|
|
},
|
|
|
|
finished: {
|
2016-10-17 23:14:38 +00:00
|
|
|
titleKey: 'dialog.error',
|
2015-03-13 14:01:42 +00:00
|
|
|
html: '<div id="errorMessage"></div>',
|
2015-12-18 17:54:15 +00:00
|
|
|
buttons: finishedButtons,
|
2015-03-13 14:01:42 +00:00
|
|
|
defaultButton: 0,
|
2016-10-03 16:12:04 +00:00
|
|
|
submit: function (e, v) {
|
2015-03-13 14:01:42 +00:00
|
|
|
e.preventDefault();
|
2015-12-15 12:09:44 +00:00
|
|
|
if (v === 'retry') {
|
2015-03-13 14:01:42 +00:00
|
|
|
connDialog.goToState('login');
|
2015-12-15 12:09:44 +00:00
|
|
|
} else {
|
2015-12-17 15:31:11 +00:00
|
|
|
// User cancelled
|
2015-12-15 12:09:44 +00:00
|
|
|
cancelCallback();
|
|
|
|
}
|
2015-03-13 14:01:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2016-06-08 19:34:02 +00:00
|
|
|
var connDialog = APP.UI.messageHandler.openDialogWithStates(
|
2015-12-15 12:09:44 +00:00
|
|
|
states, { persistent: true, closeText: '' }, null
|
|
|
|
);
|
2015-03-13 14:01:42 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Displays error message in 'finished' state which allows either to cancel
|
|
|
|
* or retry.
|
2016-10-18 16:16:52 +00:00
|
|
|
* @param messageKey the key to the message to be displayed.
|
2016-10-21 17:11:22 +00:00
|
|
|
* @param options the options to the error message (optional)
|
2015-03-13 14:01:42 +00:00
|
|
|
*/
|
2016-10-21 17:11:22 +00:00
|
|
|
this.displayError = function (messageKey, options) {
|
2015-03-13 14:01:42 +00:00
|
|
|
|
2015-12-29 14:41:24 +00:00
|
|
|
let finishedState = connDialog.getState('finished');
|
2015-03-13 14:01:42 +00:00
|
|
|
|
2015-12-29 14:41:24 +00:00
|
|
|
let errorMessageElem = finishedState.find('#errorMessage');
|
2016-10-18 16:16:52 +00:00
|
|
|
errorMessageElem.attr("data-i18n", messageKey);
|
2016-10-21 17:11:22 +00:00
|
|
|
|
|
|
|
APP.translation.translateElement($(errorMessageElem), options);
|
2015-03-13 14:01:42 +00:00
|
|
|
|
|
|
|
connDialog.goToState('finished');
|
|
|
|
};
|
|
|
|
|
2016-01-15 14:59:35 +00:00
|
|
|
/**
|
|
|
|
* Show message as connection status.
|
2016-10-18 16:16:52 +00:00
|
|
|
* @param {string} messageKey the key to the message
|
2016-01-15 14:59:35 +00:00
|
|
|
*/
|
2016-10-18 16:16:52 +00:00
|
|
|
this.displayConnectionStatus = function (messageKey) {
|
2015-12-29 14:41:24 +00:00
|
|
|
let connectingState = connDialog.getState('connecting');
|
|
|
|
|
|
|
|
let connectionStatus = connectingState.find('#connectionStatus');
|
2016-10-18 16:16:52 +00:00
|
|
|
connectionStatus.attr("data-i18n", messageKey);
|
2016-10-21 17:11:22 +00:00
|
|
|
APP.translation.translateElement($(connectionStatus));
|
2015-12-29 14:41:24 +00:00
|
|
|
};
|
|
|
|
|
2015-03-13 14:01:42 +00:00
|
|
|
/**
|
|
|
|
* Closes LoginDialog.
|
|
|
|
*/
|
|
|
|
this.close = function () {
|
|
|
|
connDialog.close();
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2016-01-15 14:59:35 +00:00
|
|
|
export default {
|
2015-03-13 14:01:42 +00:00
|
|
|
|
2016-01-15 14:59:35 +00:00
|
|
|
/**
|
|
|
|
* Show new auth dialog for JitsiConnection.
|
|
|
|
*
|
|
|
|
* @param {function(jid, password)} successCallback
|
|
|
|
* @param {function} [cancelCallback] callback to invoke if user canceled.
|
|
|
|
*
|
|
|
|
* @returns {LoginDialog}
|
|
|
|
*/
|
2015-12-17 15:31:11 +00:00
|
|
|
showAuthDialog: function (successCallback, cancelCallback) {
|
2016-01-15 14:59:35 +00:00
|
|
|
return new LoginDialog(successCallback, cancelCallback);
|
2015-12-15 12:09:44 +00:00
|
|
|
},
|
|
|
|
|
2016-01-15 14:59:35 +00:00
|
|
|
/**
|
|
|
|
* Show notification that external auth is required (using provided url).
|
|
|
|
* @param {string} url URL to use for external auth.
|
|
|
|
* @param {function} callback callback to invoke when auth popup is closed.
|
|
|
|
* @returns auth dialog
|
|
|
|
*/
|
2015-12-15 12:09:44 +00:00
|
|
|
showExternalAuthDialog: function (url, callback) {
|
2016-06-08 19:34:02 +00:00
|
|
|
var dialog = APP.UI.messageHandler.openCenteredPopup(
|
2015-12-15 12:09:44 +00:00
|
|
|
url, 910, 660,
|
|
|
|
// On closed
|
|
|
|
callback
|
|
|
|
);
|
|
|
|
|
|
|
|
if (!dialog) {
|
2016-06-08 19:34:02 +00:00
|
|
|
APP.UI.messageHandler.openMessageDialog(null, "dialog.popupError");
|
2015-12-15 12:09:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return dialog;
|
2015-12-15 16:29:37 +00:00
|
|
|
},
|
|
|
|
|
2016-01-15 14:59:35 +00:00
|
|
|
/**
|
|
|
|
* Show notification that authentication is required
|
|
|
|
* to create the conference, so he should authenticate or wait for a host.
|
|
|
|
* @param {string} roomName name of the conference
|
|
|
|
* @param {function} onAuthNow callback to invoke if
|
|
|
|
* user want to authenticate.
|
|
|
|
* @returns dialog
|
|
|
|
*/
|
2015-12-15 16:29:37 +00:00
|
|
|
showAuthRequiredDialog: function (roomName, onAuthNow) {
|
|
|
|
var msg = APP.translation.generateTranslationHTML(
|
|
|
|
"dialog.WaitForHostMsg", {room: roomName}
|
|
|
|
);
|
|
|
|
|
|
|
|
var buttonTxt = APP.translation.generateTranslationHTML(
|
|
|
|
"dialog.IamHost"
|
|
|
|
);
|
|
|
|
var buttons = [{title: buttonTxt, value: "authNow"}];
|
|
|
|
|
|
|
|
return APP.UI.messageHandler.openDialog(
|
2016-10-21 17:11:22 +00:00
|
|
|
"dialog.WaitingForHost",
|
2015-12-15 16:29:37 +00:00
|
|
|
msg,
|
|
|
|
true,
|
|
|
|
buttons,
|
2015-12-17 15:31:11 +00:00
|
|
|
function (e, submitValue) {
|
2015-12-15 16:29:37 +00:00
|
|
|
|
|
|
|
// Do not close the dialog yet
|
2015-12-17 15:31:11 +00:00
|
|
|
e.preventDefault();
|
2015-12-15 16:29:37 +00:00
|
|
|
|
|
|
|
// Open login popup
|
|
|
|
if (submitValue === 'authNow') {
|
|
|
|
onAuthNow();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
2015-03-13 14:01:42 +00:00
|
|
|
}
|
|
|
|
};
|