From 7d448bfa09d9c3b2a7b600859e92c6cc1966137b Mon Sep 17 00:00:00 2001
From: Dominik Hebeler <dominik@hebeler.club>
Date: Fri, 24 Feb 2023 12:26:34 +0100
Subject: [PATCH] login page

---
 docker-compose.yml         |  2 +-
 pass/config/default.json   |  4 ++--
 pass/resources/js/enter.js |  6 ++++--
 pass/routes/key.js         |  9 ++++-----
 pass/views/login/key.ejs   | 23 ++++++-----------------
 5 files changed, 17 insertions(+), 27 deletions(-)

diff --git a/docker-compose.yml b/docker-compose.yml
index d89540f..8a509bd 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -29,7 +29,7 @@ services:
     ports:
       - 8085:3000
       - 9229:9229
-  redis:
+  express_redis:
     build:
       context: ./build/redis
     networks:
diff --git a/pass/config/default.json b/pass/config/default.json
index dcdadd1..8aa2251 100644
--- a/pass/config/default.json
+++ b/pass/config/default.json
@@ -24,7 +24,7 @@
     "vat": 7
   },
   "redis": {
-    "host": "redis"
+    "host": "express_redis"
   },
   "storage": {
     "data_path": "/data"
@@ -81,4 +81,4 @@
       "client_id": "<INSERT_PAYPAL_CLIENT_ID>"
     }
   }
-}
+}
\ No newline at end of file
diff --git a/pass/resources/js/enter.js b/pass/resources/js/enter.js
index 0743990..1fecbb9 100644
--- a/pass/resources/js/enter.js
+++ b/pass/resources/js/enter.js
@@ -5,7 +5,9 @@ document.getElementById("qr-scan").addEventListener("pointerup", e => {
     document.querySelectorAll("#scan-qr-option .error").forEach(error => {
         error.style.display = "none";
     })
-    import('/js/qr-scanner.min.js').then(async module => {
+    let baseDir = document.getElementById("key-form").action.replace(/\/key\/enter$/, "");
+    console.log(baseDir);
+    import(`${baseDir}/js/qr-scanner.min.js`).then(async module => {
         const QrScanner = module.default;
 
         if (! await QrScanner.hasCamera()) {
@@ -28,7 +30,7 @@ document.getElementById("qr-scan").addEventListener("pointerup", e => {
             }
             let key = url.searchParams.get("key");
             if (key !== null) {
-                location.href = "/key/" + encodeURIComponent(key);
+                location.href = `${baseDir}/key/` + encodeURIComponent(key);
             } else {
                 document.getElementById("qr-decode-error").style.display = "block";
                 stopScanning();
diff --git a/pass/routes/key.js b/pass/routes/key.js
index 1852de2..4ff088f 100644
--- a/pass/routes/key.js
+++ b/pass/routes/key.js
@@ -12,7 +12,7 @@ var Key = require("../app/Key");
 
 router.get("/create", function (req, res, next) {
   Key.GET_NEW_KEY().then((key) => {
-    res.redirect("/key/" + key + "?new=true");
+    res.redirect(`${res.locals.baseDir}/key/` + key + "?new=true");
   });
 });
 
@@ -25,7 +25,7 @@ router.get("/remove", (req, res) => {
 
 router.get("/enter", function (req, res, next) {
   if (req.cookies.key) {
-    res.redirect("/key/" + encodeURIComponent(req.cookies.key));
+    res.redirect(`${res.locals.baseDir}/key/` + encodeURIComponent(req.cookies.key));
   } else {
     res.render("login/key");
   }
@@ -47,12 +47,11 @@ router.post("/enter", upload.single('file'),
     if (!errors.isEmpty()) {
       res.render("login/key", { errors: errors.array() });
       return;
-      return res.status(400).json({ errors: errors.array() });
     }
     let req_data = matchedData(req);
 
     if (typeof req_data.key !== "undefined") {
-      res.redirect("/key/" + req_data.key);
+      res.redirect(`${res.locals.baseDir}/key/` + req_data.key);
     } else if (typeof req.file === "undefined") {
       res.render("login/key", { errors: "File not provided or invalid" });
     } else {
@@ -79,7 +78,7 @@ router.post("/enter", upload.single('file'),
           }
           let key = url.searchParams.get("key");
           if (key !== null) {
-            res.redirect("/key/" + encodeURIComponent(key));
+            res.redirect(`${res.locals.baseDir}/key/` + encodeURIComponent(key));
           } else {
             res.render("login/key", { errors: ["Error parsing URL"] });
           }
diff --git a/pass/views/login/key.ejs b/pass/views/login/key.ejs
index 27277b2..a7c47f5 100644
--- a/pass/views/login/key.ejs
+++ b/pass/views/login/key.ejs
@@ -1,29 +1,18 @@
-<%- include('../templates/page_header', {css: ["/styles/key/enter.css"], js:
-["/js/enter.js"]}); %>
+<%- include('../templates/page_header', {css: [`${baseDir}/styles/key/enter.css`], js:[`${baseDir}/js/enter.js`]}); %>
 
 <div id="enter">
   <div id="form">
     <div id="direct-option" class="enter-option">
       <h3>Schlüssel eingeben</h3>
-      <form
-        id="key-form"
-        action="/key/enter"
-        method="post"
-        enctype="multipart/form-data"
-      >
-        <input
-          type="text"
-          name="key"
-          id="key"
-          placeholder="Schlüssel eingeben"
-        />
+      <form id="key-form" action="<%= baseDir _%>/key/enter" method="post" enctype="multipart/form-data">
+        <input type="text" name="key" id="key" placeholder="Schlüssel eingeben" />
       </form>
     </div>
     <div id="file-option" class="enter-option">
       <div class="divider">oder</div>
       <div id="file-selector">
         <label for="file">
-          <img src="/images/upload.svg" alt="" />
+          <img src="<%= baseDir _%>/images/upload.svg" alt="" />
           <span> Sicherungsdatei hochladen </span>
         </label>
         <input type="file" name="file" id="file" form="key-form" />
@@ -32,7 +21,7 @@
     <div id="scan-qr-option" class="enter-option">
       <div class="divider">oder</div>
       <a href="javascript:void(0);" id="qr-scan">
-        <img src="/images/camera.svg" alt="" />
+        <img src="<%= baseDir _%>/images/camera.svg" alt="" />
         <span> QR-Code Scannen </span>
       </a>
       <div id="qr-camera-error" class="error">Keine Kamera verfügbar</div>
@@ -56,4 +45,4 @@
   </div>
 </div>
 
-<%- include('../templates/page_footer'); -%>
+<%- include('../templates/page_footer'); -%>
\ No newline at end of file
-- 
GitLab