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