File size: 2,093 Bytes
a6db6a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
document.addEventListener("DOMContentLoaded", () => {
  const uploadForm = document.getElementById("upload-form");
  const emptyVaultBtn = document.getElementById("empty-vault");
  const fileList = document.getElementById("file-list");

  uploadForm.addEventListener("submit", async (e) => {
    e.preventDefault();
    const formData = new FormData(e.target);
    try {
      const response = await axios.post("/upload", formData, {
        headers: { "Content-Type": "multipart/form-data" },
      });
      alert(response.data.message);
      location.reload();
    } catch (error) {
      alert("Upload failed: " + (error.response?.data?.error || error.message));
    }
  });

  emptyVaultBtn.addEventListener("click", async () => {
    const confirmed = confirm(
      "Are you sure you want to empty your vault? This action cannot be undone.",
    );
    if (confirmed) {
      const password = prompt(
        "Enter your password to confirm emptying your vault:",
      );
      if (password) {
        try {
          const response = await axios.post("/empty", { password });
          alert(response.data.message);
          location.reload();
        } catch (error) {
          alert(
            "Failed to empty vault: " +
              (error.response?.data?.error || error.message),
          );
        }
      }
    }
  });

  fileList.addEventListener("click", async (e) => {
    if (e.target.classList.contains("download-btn")) {
      const filename = e.target.dataset.filename;
      window.location.href = `/download/${filename}`;
    } else if (e.target.classList.contains("delete-btn")) {
      const filename = e.target.dataset.filename;
      if (confirm(`Are you sure you want to delete ${filename}?`)) {
        try {
          const response = await axios.delete(`/delete/${filename}`);
          alert(response.data.message);
          e.target.closest("li").remove();
        } catch (error) {
          alert(
            "Failed to delete file: " +
              (error.response?.data?.error || error.message),
          );
        }
      }
    }
  });
});