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.

RoomLocker.js 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /* global APP, JitsiMeetJS */
  2. import messageHandler from '../util/MessageHandler';
  3. import UIUtil from '../util/UIUtil';
  4. //FIXME:
  5. import AnalyticsAdapter from '../../statistics/AnalyticsAdapter';
  6. function askForNewPassword () {
  7. let passMsg = APP.translation.generateTranslationHTML("dialog.passwordMsg");
  8. let yourPassMsg = APP.translation.translateString("dialog.yourPassword");
  9. let msg = `
  10. <h2>${passMsg}</h2>
  11. <input name="lockKey" type="text"
  12. data-i18n="[placeholder]dialog.yourPassword"
  13. placeholder="${yourPassMsg}" autofocus>
  14. `;
  15. return new Promise(function (resolve, reject) {
  16. messageHandler.openTwoButtonDialog(
  17. null, null, null,
  18. msg, false, "dialog.Save",
  19. function (e, v, m, f) {
  20. if (v && f.lockKey) {
  21. resolve(UIUtil.escapeHtml(f.lockKey));
  22. } else {
  23. reject();
  24. }
  25. },
  26. null, null, 'input:first'
  27. );
  28. });
  29. }
  30. function askForPassword () {
  31. let passRequiredMsg = APP.translation.translateString(
  32. "dialog.passwordRequired"
  33. );
  34. let passMsg = APP.translation.translateString("dialog.password");
  35. let msg = `
  36. <h2 data-i18n="dialog.passwordRequired">${passRequiredMsg}</h2>
  37. <input name="lockKey" type="text"
  38. data-i18n="[placeholder]dialog.password"
  39. placeholder="${passMsg}" autofocus>
  40. `;
  41. return new Promise(function (resolve, reject) {
  42. messageHandler.openTwoButtonDialog(
  43. null, null, null, msg,
  44. true, "dialog.Ok",
  45. function (e, v, m, f) {}, null,
  46. function (e, v, m, f) {
  47. if (v && f.lockKey) {
  48. resolve(UIUtil.escapeHtml(f.lockKey));
  49. } else {
  50. reject();
  51. }
  52. },
  53. ':input:first'
  54. );
  55. });
  56. }
  57. function askToUnlock () {
  58. return new Promise(function (resolve, reject) {
  59. messageHandler.openTwoButtonDialog(
  60. null, null, "dialog.passwordCheck",
  61. null, false, "dialog.Remove",
  62. function (e, v) {
  63. if (v) {
  64. resolve();
  65. } else {
  66. reject();
  67. }
  68. }
  69. );
  70. });
  71. }
  72. function notifyPasswordNotSupported (err) {
  73. console.warn('setting password failed', err);
  74. messageHandler.showError("dialog.warning", "dialog.passwordNotSupported");
  75. }
  76. function notifyPasswordFailed() {
  77. console.warn('room passwords not supported');
  78. messageHandler.showError("dialog.lockTitle", "dialog.lockMessage");
  79. }
  80. const ConferenceErrors = JitsiMeetJS.errors.conference;
  81. export default function createRoomLocker (room) {
  82. let password;
  83. function lock (newPass) {
  84. return room.lock(newPass).then(function () {
  85. password = newPass;
  86. }).catch(function (err) {
  87. console.error(err);
  88. if (err === ConferenceErrors.PASSWORD_NOT_SUPPORTED) {
  89. notifyPasswordNotSupported();
  90. } else {
  91. notifyPasswordFailed(err);
  92. }
  93. throw err;
  94. });
  95. }
  96. return {
  97. get isLocked () {
  98. return !!password;
  99. },
  100. get password () {
  101. return password;
  102. },
  103. askToUnlock () {
  104. return askToUnlock().then(function () {
  105. return lock();
  106. }).then(function () {
  107. AnalyticsAdapter.sendEvent('toolbar.lock.disabled');
  108. });
  109. },
  110. askToLock () {
  111. return askForNewPassword().then(function (newPass) {
  112. return lock(newPass);
  113. }).then(function () {
  114. AnalyticsAdapter.sendEvent('toolbar.lock.enabled');
  115. });
  116. },
  117. requirePassword () {
  118. return askForPassword().then(function (newPass) {
  119. password = newPass;
  120. });
  121. },
  122. notifyModeratorRequired () {
  123. if (password) {
  124. messageHandler.openMessageDialog(null, "dialog.passwordError");
  125. } else {
  126. messageHandler.openMessageDialog(null, "dialog.passwordError2");
  127. }
  128. }
  129. };
  130. }