From 6a4e172995e1696fc087f7f210dbd189912cb7d8 Mon Sep 17 00:00:00 2001
From: Dominik Hebeler <dominik@hebeler.club>
Date: Fri, 24 Feb 2023 11:47:06 +0100
Subject: [PATCH] startpage available in subdirectory

---
 pass/app.js                          | 17 ++++++++++++++---
 pass/routes/index.js                 |  8 +++++++-
 pass/views/index.ejs                 | 16 ++++++++--------
 pass/views/templates/page_header.ejs | 15 ++++++++-------
 4 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/pass/app.js b/pass/app.js
index b2d5a5d..722122b 100644
--- a/pass/app.js
+++ b/pass/app.js
@@ -3,7 +3,7 @@ var express = require("express");
 var path = require("path");
 var cookieParser = require("cookie-parser");
 var browserify = require("browserify-middleware");
-var lessMiddleware = require("less-middleware");
+
 var logger = require("morgan");
 
 var indexRouter = require("./routes/index");
@@ -31,8 +31,19 @@ if (process.env.NODE_ENV === "development") {
 app.use(express.json());
 app.use(express.urlencoded({ extended: false, limit: "1mb" }));
 app.use(cookieParser());
-app.use(lessMiddleware(path.join(__dirname, "public")));
-app.use(express.static(path.join(__dirname, "public")));
+
+app.use((req, res, next) => {
+  let subPath = req.url.match(/^((\/.*)?\/keys)/);
+  if (subPath) {
+    res.locals.baseDir = subPath[1];
+  } else {
+    res.locals.baseDir = "";
+  }
+  next();
+});
+app.use(/^((\/.*)?\/keys)/, indexRouter);
+app.use(indexRouter);
+
 
 app.use("/", authenticationRouter);
 app.use("/", indexRouter);
diff --git a/pass/routes/index.js b/pass/routes/index.js
index 9ba6028..1bb275f 100644
--- a/pass/routes/index.js
+++ b/pass/routes/index.js
@@ -1,6 +1,12 @@
 var express = require("express");
 const Order = require("../app/Order.js");
-var router = express.Router();
+var router = express.Router({ mergeParams: true });
+
+var lessMiddleware = require("less-middleware");
+var path = require("path");
+
+router.use(lessMiddleware(path.join(__dirname, "..", "public")));
+router.use(express.static(path.join(__dirname, "..", "public")));
 
 /* GET home page. */
 router.get("/", function (req, res, next) {
diff --git a/pass/views/index.ejs b/pass/views/index.ejs
index 33cfa24..f2d12af 100644
--- a/pass/views/index.ejs
+++ b/pass/views/index.ejs
@@ -1,4 +1,4 @@
-<%- include('templates/page_header', {css: ['/styles/index.css'], js: ['/js/index.js']}); %>
+<%- include('templates/page_header', {css: [`${baseDir}/styles/index.css`], js: [`${baseDir}/js/index.js`]}); %>
 <div id="hero">
   <div class="container">
     <h1>Ihr Zugang zum maximalen Datenschutz bei der Suche</h1>
@@ -10,14 +10,14 @@
       <li>Ohne Kompromisse</li>
     </ul>
     <div class="search-logo">
-      <img class="metager-logo" src="/images/metager.svg" alt="">
+      <img class="metager-logo" src="<%= baseDir _%>/images/metager.svg" alt="">
       <div class="searchbar">
         <button>
-          <img src="/images/key-verified.svg" alt="">
+          <img src="<%= baseDir _%>/images/key-verified.svg" alt="">
         </button>
         <input type="text" name="eingabe" id="eingabe" value="Anonym im Internet" disabled>
         <button>
-          <img src="/images/icon-lupe.svg" alt="Suchen">
+          <img src="<%= baseDir _%>/images/icon-lupe.svg" alt="Suchen">
         </button>
       </div>
     </div>
@@ -26,7 +26,7 @@
 </div>
 <div id="advantages">
   <div class="advantage" id="no-ads">
-    <img src="/images/hand.svg" alt="Image depicting money">
+    <img src="<%= baseDir _%>/images/hand.svg" alt="Image depicting money">
     <div class="text">
       <h2>Ohne Werbeanzeigen</h2>
       <p>Kein Dienst kann kostenlos betrieben werden. Wenn ein Dienst im Internet kostenlos zur Verfügung steht, wird er in der Regel durch Werbeeinnahmen finanziert. MetaGer ist da keine Ausnahme. Selbst die datenschutzfreundlichste Werbung kann Ihre Daten nicht mehr schützen, wenn auf einen Werbelink geklickt wird. Mit MetaGer-Pass ist nun aber Schluss damit:</p>
@@ -37,7 +37,7 @@
     </div>
   </div>
   <div class="advantage" id="no-logging">
-    <img src="/images/robot.svg" alt="Image depicting a roboter">
+    <img src="<%= baseDir _%>/images/robot.svg" alt="Image depicting a roboter">
     <div class="text">
       <h2>Ohne Logging</h2>
       <p>Bei Ihren Internetsuchen fallen automatisch viele Daten an. Mit MetaGer-Pass kümmern wir uns darum, dass diese Daten gar nicht erst abgespeichert werden.</p>
@@ -47,7 +47,7 @@
     </div>
   </div>
   <div class="advantage" id="no-tradeoff">
-    <img src="/images/metager-schloss-orange.svg" alt="Image depicting a lock">
+    <img src="<%= baseDir _%>/images/metager-schloss-orange.svg" alt="Image depicting a lock">
     <div class="text">
       <h2>Ohne Kompromisse</h2>
       <p>Es gibt bei MetaGer keine Nutzeraccounts. Sie erhalten von uns einen zufällig generierten Schlüssel. Es sind keine Kontaktdaten notwendig. Außerdem bieten wir mit PaySafe Card und Bargeld auch mehrere anonyme Zahlungsmethoden an. Wer noch einen Schritt weiter gehen möchte, kann anstelle eines Schlüssels unsere <a href="#">MetaGer-Pass Tokens</a> verwenden.</p>
@@ -80,7 +80,7 @@
     </li>
   </ol>
   <div id="how-it-works-action">
-    <a href="/key/create" class="button">Los geht's</a>
+    <a href="<%= baseDir _%>/key/create" class="button">Los geht's</a>
   </div>
 </div>
 <div id="offers">
diff --git a/pass/views/templates/page_header.ejs b/pass/views/templates/page_header.ejs
index 31c7495..a7ab555 100644
--- a/pass/views/templates/page_header.ejs
+++ b/pass/views/templates/page_header.ejs
@@ -5,15 +5,15 @@
   <title>MetaGer - Pass</title>
   <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
   <%_ if (typeof auth_session_expiration_seconds !== "undefined") { _%>
-  <meta http-equiv="refresh" content="<%= auth_session_expiration_seconds %>; URL=/">
+  <meta http-equiv="refresh" content="<%= auth_session_expiration_seconds %>; URL=<%= baseDir _%>/">
   <%_ } _%>
-  <link rel='stylesheet' href='/styles/base.css' />
+  <link rel='stylesheet' href='<%= baseDir _%>/styles/base.css' />
   <%_ if (typeof css !=='undefined' ) { -%>
   <%_ css.forEach(css_file=> { -%>
   <link rel="stylesheet" href="<%- css_file %>">
   <%_ }) _%>
   <%_ } _%>
-  <script defer src="/js/base.js"></script>
+  <script defer src="<%= baseDir _%>/js/base.js"></script>
   <%_ if (typeof js !=='undefined' ) { -%>
   <%_ js.forEach(js_file=> { -%>
   <script src="<%- js_file %>" defer></script>
@@ -25,7 +25,7 @@
   <nav id="primary-nav">
     <div id="page-logo">
       <a href="/">
-        <img src="/images/metager-schloss-orange.svg" alt="MetaGer Schloss">
+        <img src="<%= baseDir _%>/images/metager-schloss-orange.svg" alt="MetaGer Schloss">
       </a>
     </div>
     <input type="checkbox" name="nav-opener" id="nav-opener" aria-hidden="true">
@@ -41,11 +41,12 @@
       <li><a href="#">Preise</a></li>
       <li><a href="#">Hilfe</a></li>
       <li class="whitespace"></li>
-      <li><a href="/key/enter">Schlüssel verwalten</a></li>
+      <li><a href="<%= baseDir _%>/key/enter">Schlüssel verwalten</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>
+      <li>|</li>
+      <li><a href="<%= baseDir _%>/key/remove" class="button negative" id="key-remove">Logout</a></li>
       <%_ } else { _%>
-        <li><a href="/key/create" class="button">Starten</a></li>
+      <li><a href="<%= baseDir _%>/key/create" class="button">Starten</a></li>
       <%_ } _%>
     </ul>
   </nav>
-- 
GitLab