From 4e252dfef5004993b0f3e6c963468d90ea617ff7 Mon Sep 17 00:00:00 2001
From: Dominik Hebeler <dominik@hebeler.club>
Date: Wed, 22 Feb 2023 16:15:25 +0100
Subject: [PATCH] logout button

---
 pass/public/styles/base.less         |  8 +++++++-
 pass/public/styles/misc/vars.less    |  1 +
 pass/routes/key.js                   | 12 +++++++++++-
 pass/views/templates/page_header.ejs |  6 +++++-
 4 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/pass/public/styles/base.less b/pass/public/styles/base.less
index 860be6f..aed6245 100644
--- a/pass/public/styles/base.less
+++ b/pass/public/styles/base.less
@@ -115,13 +115,19 @@ button {
   text-decoration: none;
   background-color: @color-secondary;
   width: max-content;
-
   &:hover {
     color: inherit;
     background-color: fade(@color-secondary, 70%);
     border-color: @color-main;
     color: fade(white, 90%);
   }
+  &.negative {
+    background-color: @color-negative;
+    &:hover {
+      background-color: fade(@color-negative, 70%);
+      color: white;
+    }
+  }
 }
 
 nav#primary-nav {
diff --git a/pass/public/styles/misc/vars.less b/pass/public/styles/misc/vars.less
index e8e1663..9b39a15 100644
--- a/pass/public/styles/misc/vars.less
+++ b/pass/public/styles/misc/vars.less
@@ -2,6 +2,7 @@
 @color-secondary: #3a3af9;
 @color-main-hover: lighten(@color-main, 5%);
 @color-main-font-color: white;
+@color-negative: rgba(255, 0, 0, 0.432);
 
 @font-color-on-white: #515151;
 
diff --git a/pass/routes/key.js b/pass/routes/key.js
index 1156cf9..1852de2 100644
--- a/pass/routes/key.js
+++ b/pass/routes/key.js
@@ -16,6 +16,13 @@ router.get("/create", function (req, res, next) {
   });
 });
 
+router.get("/remove", (req, res) => {
+  if (req.cookies.key) {
+    res.clearCookie("key");
+  }
+  res.redirect("/");
+})
+
 router.get("/enter", function (req, res, next) {
   if (req.cookies.key) {
     res.redirect("/key/" + encodeURIComponent(req.cookies.key));
@@ -106,6 +113,7 @@ router.use("/:key", param("key").isUUID(4), async (req, res, next) => {
       settings_url: metager_url,
       qr: qr_data_uri,
     },
+    cookies: req.cookies,
     page: "fill",
     links: {
       fill_url: `/key/${req.params.key}`,
@@ -116,7 +124,9 @@ router.use("/:key", param("key").isUUID(4), async (req, res, next) => {
   });
 
   if (!req.data.admin && (!req.cookies.key || req.cookies.key !== req.data.key.key)) {
-    res.cookie("key", req.data.key.key);
+    res.cookie("key", req.data.key.key, {
+      sameSite: "lax"
+    });
   }
 
   next("route");
diff --git a/pass/views/templates/page_header.ejs b/pass/views/templates/page_header.ejs
index 80a2973..31c7495 100644
--- a/pass/views/templates/page_header.ejs
+++ b/pass/views/templates/page_header.ejs
@@ -42,7 +42,11 @@
       <li><a href="#">Hilfe</a></li>
       <li class="whitespace"></li>
       <li><a href="/key/enter">Schlüssel verwalten</a></li>
-      <li><a href="/key/create" class="button">Starten</a></li>
+      <%_ if((typeof cookies !== "undefined" && typeof cookies.key !== "undefined") || typeof key !== "undefined") { _%>
+      <li><a href="/key/remove" class="button negative" id="key-remove">Schlüssel entfernen</a></li>
+      <%_ } else { _%>
+        <li><a href="/key/create" class="button">Starten</a></li>
+      <%_ } _%>
     </ul>
   </nav>
   <main>
\ No newline at end of file
-- 
GitLab