]> OzVa Git service - ozva-cloud/commitdiff
feat: webui support logout (#439)
authorsigoden <sigoden@gmail.com>
Sat, 24 Aug 2024 07:38:13 +0000 (15:38 +0800)
committerGitHub <noreply@github.com>
Sat, 24 Aug 2024 07:38:13 +0000 (15:38 +0800)
assets/index.css
assets/index.html
assets/index.js

index 9ad9092d64e9abe6ec1a9768e48de7238ae2025b..42d8e01ef7d1398f5bbd6dbc613425cc83f8ee56 100644 (file)
@@ -222,13 +222,18 @@ body {
   margin-right: 2em;
 }
 
+.login-btn {
+  cursor: pointer;
+}
+
 .save-btn {
   cursor: pointer;
   -webkit-user-select: none;
   user-select: none;
 }
 
-.user-btn {
+.logout-btn {
+  cursor: pointer;
   display: flex;
   align-items: center;
 }
index 667da48d37bd6927b5d5402e42d2fd966024ce68..d814aa09fbd1f0e52d1ac14072394bed693cf8c0 100644 (file)
@@ -75,7 +75,7 @@
       <input type="submit" hidden />
     </form>
     <div class="toolbox-right">
-      <div class="login-btn hidden" title="Login for upload/move/delete/edit permissions">
+      <div class="login-btn hidden" title="Login">
         <svg width="16" height="16" viewBox="0 0 16 16">
           <path fill-rule="evenodd"
             d="M6 3.5a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 0-1 0v2A1.5 1.5 0 0 0 6.5 14h8a1.5 1.5 0 0 0 1.5-1.5v-9A1.5 1.5 0 0 0 14.5 2h-8A1.5 1.5 0 0 0 5 3.5v2a.5.5 0 0 0 1 0v-2z" />
             d="M11.854 8.354a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H1.5a.5.5 0 0 0 0 1h8.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3z" />
         </svg>
       </div>
-      <div class="user-btn hidden">
+      <div class="logout-btn hidden" title="Logout">
         <svg width="16" height="16" viewBox="0 0 16 16">
-          <path
-            d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6Zm2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4Zm-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h10Z" />
+          <path fill-rule="evenodd" d="M10 3.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 1 1 0v2A1.5 1.5 0 0 1 9.5 14h-8A1.5 1.5 0 0 1 0 12.5v-9A1.5 1.5 0 0 1 1.5 2h8A1.5 1.5 0 0 1 11 3.5v2a.5.5 0 0 1-1 0z"/>
+          <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708z"/>
         </svg>
         <span class="user-name"></span>
       </div>
index e515bdc00323dfc52ffe63fbce861f406de4d1b4..ab29f8bfa864c062715c4e233cf44da2c26f1d0d 100644 (file)
@@ -94,7 +94,7 @@ let $editor;
 /**
  * @type Element
  */
-let $userBtn;
+let $logoutBtn;
 /**
  * @type Element
  */
@@ -121,7 +121,7 @@ async function ready() {
   $uploadersTable = document.querySelector(".uploaders-table");
   $emptyFolder = document.querySelector(".empty-folder");
   $editor = document.querySelector(".editor");
-  $userBtn = document.querySelector(".user-btn");
+  $logoutBtn = document.querySelector(".logout-btn");
   $userName = document.querySelector(".user-name");
 
   addBreadcrumb(DATA.href, DATA.uri_prefix);
@@ -513,7 +513,8 @@ function setupDropzone() {
 
 async function setupAuth() {
   if (DATA.user) {
-    $userBtn.classList.remove("hidden");
+    $logoutBtn.classList.remove("hidden");
+    $logoutBtn.addEventListener("click", logout);
     $userName.textContent = DATA.user;
   } else {
     const $loginBtn = document.querySelector(".login-btn");
@@ -522,9 +523,7 @@ async function setupAuth() {
       try {
         await checkAuth();
         location.reload();
-      } catch (err) {
-        alert(err.message);
-      }
+      } catch {}
     });
   }
 }
@@ -750,10 +749,21 @@ async function checkAuth() {
   });
   await assertResOK(res);
   document.querySelector(".login-btn").classList.add("hidden");
-  $userBtn.classList.remove("hidden");
+  $logoutBtn.classList.remove("hidden");
   $userName.textContent = "";
 }
 
+function logout() {
+  if (!DATA.auth) return;
+  const url = baseUrl();
+  const xhr = new XMLHttpRequest();
+  xhr.open("AUTH", url, true, ":");
+  xhr.send();
+  setTimeout(() => {
+    location.href = url;
+  }, 200);
+}
+
 /**
  * Create a folder
  * @param {string} name