You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LoginDialog.js 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /* global $, APP, config*/
  2. var messageHandler = require('../util/MessageHandler');
  3. function getPasswordInputHtml() {
  4. let placeholder = config.hosts.authdomain
  5. ? "user identity"
  6. : "user@domain.net";
  7. let passRequiredMsg = APP.translation.translateString(
  8. "dialog.passwordRequired"
  9. );
  10. return `
  11. <h2 data-i18n="dialog.passwordRequired">${passRequiredMsg}</h2>
  12. <input name="username" type="text" placeholder=${placeholder} autofocus>
  13. <input name="password" type="password"
  14. data-i18n="[placeholder]dialog.userPassword"
  15. placeholder="user password">
  16. `;
  17. }
  18. function Dialog(successCallback, cancelCallback) {
  19. const states = {
  20. login: {
  21. html: getPasswordInputHtml(),
  22. buttons: [{
  23. title: APP.translation.generateTranslationHTML("dialog.Ok"),
  24. value: true
  25. }, {
  26. title: APP.translation.generateTranslationHTML("dialog.Cancel"),
  27. value: false
  28. }],
  29. focus: ':input:first',
  30. submit: function (e, v, m, f) {
  31. e.preventDefault();
  32. if (v) {
  33. let jid = f.username;
  34. let password = f.password;
  35. if (jid && password) {
  36. connDialog.goToState('connecting');
  37. successCallback(jid, password);
  38. }
  39. } else {
  40. // User cancelled
  41. cancelCallback();
  42. }
  43. }
  44. },
  45. connecting: {
  46. title: APP.translation.translateString('dialog.connecting'),
  47. html: '<div id="connectionStatus"></div>',
  48. buttons: [],
  49. defaultButton: 0
  50. },
  51. finished: {
  52. title: APP.translation.translateString('dialog.error'),
  53. html: '<div id="errorMessage"></div>',
  54. buttons: [{
  55. title: APP.translation.translateString('dialog.retry'),
  56. value: 'retry'
  57. }, {
  58. title: APP.translation.generateTranslationHTML("dialog.Cancel"),
  59. value: false
  60. }],
  61. defaultButton: 0,
  62. submit: function (e, v, m, f) {
  63. e.preventDefault();
  64. if (v === 'retry') {
  65. connDialog.goToState('login');
  66. } else {
  67. // User cancelled
  68. cancelCallback();
  69. }
  70. }
  71. }
  72. };
  73. var connDialog = messageHandler.openDialogWithStates(
  74. states, { persistent: true, closeText: '' }, null
  75. );
  76. /**
  77. * Displays error message in 'finished' state which allows either to cancel
  78. * or retry.
  79. * @param message the final message to be displayed.
  80. */
  81. this.displayError = function (message) {
  82. var finishedState = connDialog.getState('finished');
  83. var errorMessageElem = finishedState.find('#errorMessage');
  84. errorMessageElem.text(message);
  85. connDialog.goToState('finished');
  86. };
  87. /**
  88. * Closes LoginDialog.
  89. */
  90. this.close = function () {
  91. connDialog.close();
  92. };
  93. }
  94. const LoginDialog = {
  95. showAuthDialog: function (successCallback, cancelCallback) {
  96. return new Dialog(successCallback, cancelCallback);
  97. },
  98. showExternalAuthDialog: function (url, callback) {
  99. var dialog = messageHandler.openCenteredPopup(
  100. url, 910, 660,
  101. // On closed
  102. callback
  103. );
  104. if (!dialog) {
  105. messageHandler.openMessageDialog(null, "dialog.popupError");
  106. }
  107. return dialog;
  108. },
  109. showAuthRequiredDialog: function (roomName, onAuthNow) {
  110. var title = APP.translation.generateTranslationHTML(
  111. "dialog.WaitingForHost"
  112. );
  113. var msg = APP.translation.generateTranslationHTML(
  114. "dialog.WaitForHostMsg", {room: roomName}
  115. );
  116. var buttonTxt = APP.translation.generateTranslationHTML(
  117. "dialog.IamHost"
  118. );
  119. var buttons = [{title: buttonTxt, value: "authNow"}];
  120. return APP.UI.messageHandler.openDialog(
  121. title,
  122. msg,
  123. true,
  124. buttons,
  125. function (e, submitValue) {
  126. // Do not close the dialog yet
  127. e.preventDefault();
  128. // Open login popup
  129. if (submitValue === 'authNow') {
  130. onAuthNow();
  131. }
  132. }
  133. );
  134. }
  135. };
  136. export default LoginDialog;