uiAccess.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. $(() => {
  2. document.getElementById("menu-login").addEventListener("click", (e) => {
  3. e.preventDefault();
  4. document.body.classList.add("login-visible");
  5. document.body.classList.add("overlay-visible");
  6. document.Title.pushTitle("Login");
  7. });
  8. function closeLoginPopin() {
  9. if (!document.body.classList.contains("login-visible")) return;
  10. document.Title.pop();
  11. document.body.classList.remove("login-visible");
  12. document.body.classList.remove("overlay-visible");
  13. let inputFields = document.querySelectorAll(".login-wrapper .input-group input");
  14. for (let i = 0; i < inputFields.length; ++i)
  15. if (inputFields[i].type !== "submit") inputFields[i].value = "";
  16. $(".login-wrapper .error").addClass("hidden");
  17. document.querySelector("#login-email input[name='code']").classList.add("hidden");
  18. }
  19. document.onClosePopinRequested(() => {
  20. closeLoginPopin();
  21. });
  22. document
  23. .querySelector(".login-wrapper .modal-footer button")
  24. .addEventListener("click", () => closeLoginPopin());
  25. (() => {
  26. let loginUserPass = document.getElementById("login-userpass");
  27. loginUserPass.parentElement.addEventListener("submit", (e) => {
  28. e.preventDefault();
  29. let user = loginUserPass.querySelector("input[type='text']").value;
  30. let pass = loginUserPass.querySelector("input[type='password']").value;
  31. LoadingTasks.push(async () => {
  32. try {
  33. await AccessManager.LoginUserPass(user, pass);
  34. } catch (err) {
  35. let errDiv = loginUserPass.parentElement.querySelector(".error");
  36. errDiv.textContent = err;
  37. errDiv.classList.remove("hidden");
  38. return;
  39. }
  40. await MediaStorage.Instance.rebuildMetaList();
  41. closeLoginPopin();
  42. });
  43. });
  44. })();
  45. (() => {
  46. let loginMailTotp = document.getElementById("login-email");
  47. loginMailTotp.parentElement.addEventListener("submit", (e) => {
  48. e.preventDefault();
  49. let email = loginMailTotp.querySelector("input[type='email']").value;
  50. let code = loginMailTotp.querySelector("input[type='text']");
  51. if (code.classList.contains("hidden")) {
  52. LoadingTasks.push(async () => {
  53. await AccessManager.SendTotpCodeToEmail(email);
  54. code.classList.remove("hidden");
  55. });
  56. } else {
  57. LoadingTasks.push(async () => {
  58. try {
  59. await AccessManager.LoginUserEmailAndTotp(email, code.value);
  60. } catch (err) {
  61. let errDiv = loginMailTotp.parentElement.parentElement.querySelector(".error");
  62. errDiv.textContent = err;
  63. errDiv.classList.remove("hidden");
  64. return;
  65. }
  66. await MediaStorage.Instance.rebuildMetaList();
  67. closeLoginPopin();
  68. });
  69. }
  70. });
  71. })();
  72. (() => {
  73. let loginCode = document.getElementById("login-code");
  74. loginCode.querySelector("button").addEventListener("click", () => {
  75. let code = loginCode.querySelector("input").value;
  76. if (!code) return;
  77. LoadingTasks.push(async () => {
  78. await AccessManager.LinkLogin(new Set([code]));
  79. await MediaStorage.Instance.rebuildMetaList();
  80. closeLoginPopin();
  81. });
  82. });
  83. })();
  84. async function logout(accessId) {
  85. await AccessManager.Logout(accessId);
  86. await MediaStorage.Instance.rebuildMetaList();
  87. closeLoginPopin();
  88. }
  89. window.ReloadAccessList = function (accessList) {
  90. if (accessList.isAdmin) {
  91. document
  92. .getElementById("menu-dbAdmin-container")
  93. .classList.remove("hidden");
  94. document.getElementById("pch-navbar-share").classList.remove("hidden");
  95. document.getElementById("pch-navbar-autotags").classList.remove("hidden");
  96. } else {
  97. document.getElementById("menu-dbAdmin-container").classList.add("hidden");
  98. document.getElementById("pch-navbar-share").classList.add("hidden");
  99. document.getElementById("pch-navbar-autotags").classList.add("hidden");
  100. }
  101. let getIconForType = (type) => {
  102. if (!!type.ldapDn) return "bi-database";
  103. if (!!type.linkId) return "bi-link-45deg";
  104. if (!!type.email) return "bi-envelope-at";
  105. if (!!type.userName) return "bi-person";
  106. return "bi-question-octagon";
  107. };
  108. let rootNode = document.getElementById("accessListMenu");
  109. let items = rootNode.querySelectorAll("li.accessItem");
  110. for (let i = 0; i < items.length; ++i) items[i].remove();
  111. delete accessList.isAdmin;
  112. delete accessList.isAdmin_;
  113. if (Object.keys(accessList || {}).length) {
  114. let li = document.createElement("li");
  115. li.classList.add("accessItem");
  116. li.classList.add("divider");
  117. let hr = document.createElement("hr");
  118. hr.classList.add("dropdown-divider");
  119. li.appendChild(hr);
  120. rootNode.appendChild(li);
  121. }
  122. for (let i in accessList) {
  123. const access = accessList[i];
  124. const accessTextValue = access.linkLabel || access.linkId || access.ldapDn || access.email;
  125. let li = document.createElement("li");
  126. li.classList.add("accessItem");
  127. li.classList.add("dropdown-item");
  128. let a = document.createElement("a");
  129. let typeIcon = document.createElement("span");
  130. typeIcon.innerHTML = "&nbsp;";
  131. typeIcon.classList = "type bi " + getIconForType(access);
  132. let accessText = document.createElement("span");
  133. accessText.innerText = accessTextValue;
  134. let logoutIcon = document.createElement("span");
  135. logoutIcon.innerHTML = "&nbsp;";
  136. logoutIcon.classList = "logout bi bi-box-arrow-right";
  137. a.appendChild(typeIcon);
  138. a.appendChild(accessText);
  139. a.appendChild(logoutIcon);
  140. li.appendChild(a);
  141. rootNode.appendChild(li);
  142. a.addEventListener("click", async (e) => {
  143. e.preventDefault();
  144. if (!(await window.confirm("Logout account " + accessTextValue + " ?")))
  145. return;
  146. logout(i);
  147. });
  148. }
  149. };
  150. });