From 7a130d1fe5baecd6b83a13543de2ccc39c260abe Mon Sep 17 00:00:00 2001
From: zachmann <gabriel.zachmann@kit.edu>
Date: Thu, 18 Aug 2022 14:57:02 +0200
Subject: [PATCH] add elements to home page that can be used with login

---
 internal/server/handlers.go                   | 18 +++---
 internal/server/web/partials/scripts.mustache |  7 ++-
 internal/server/web/partials/style.mustache   |  6 +-
 internal/server/web/sites/home.mustache       | 51 ++++++++++------
 internal/server/web/sites/index.mustache      | 15 -----
 .../web/static/css/mytoken-loggedin.css       | 56 ------------------
 internal/server/web/static/css/mytoken.css    | 59 ++++++++++++++++++-
 .../server/web/static/js/home-logged-in.js    |  9 +++
 .../web/static/js/home-not-logged-in.js       |  7 +++
 internal/server/web/static/js/home.js         | 10 +---
 .../server/web/static/js/logged-in-utils.js   |  8 ---
 internal/server/web/static/js/utils.js        |  9 ++-
 12 files changed, 132 insertions(+), 123 deletions(-)
 delete mode 100644 internal/server/web/sites/index.mustache
 delete mode 100644 internal/server/web/static/css/mytoken-loggedin.css
 create mode 100644 internal/server/web/static/js/home-logged-in.js
 create mode 100644 internal/server/web/static/js/home-not-logged-in.js
 delete mode 100644 internal/server/web/static/js/logged-in-utils.js

diff --git a/internal/server/handlers.go b/internal/server/handlers.go
index 8600b215..49ffb021 100644
--- a/internal/server/handlers.go
+++ b/internal/server/handlers.go
@@ -13,10 +13,9 @@ import (
 )
 
 func handleIndex(ctx *fiber.Ctx) error {
-	binding := map[string]interface{}{
-		templating.MustacheKeyLoggedIn:       false,
-		templating.MustacheKeyCookieLifetime: cookies.CookieLifetime,
-	}
+	binding := homeBindingData()
+	binding[templating.MustacheKeyLoggedIn] = false
+	binding[templating.MustacheKeyCookieLifetime] = cookies.CookieLifetime
 	providers := []map[string]string{}
 	for _, p := range config.Get().Providers {
 		pp := make(map[string]string, 2)
@@ -25,11 +24,11 @@ func handleIndex(ctx *fiber.Ctx) error {
 		providers = append(providers, pp)
 	}
 	binding["providers"] = providers
-	return ctx.Render("sites/index", binding, templating.LayoutMain)
+	return ctx.Render("sites/home", binding, templating.LayoutMain)
 }
 
-func handleHome(ctx *fiber.Ctx) error {
-	binding := map[string]interface{}{
+func homeBindingData() map[string]interface{} {
+	return map[string]interface{}{
 		templating.MustacheKeyLoggedIn:             true,
 		templating.MustacheKeyRestrictionsGUI:      true,
 		templating.MustacheKeyHome:                 true,
@@ -46,7 +45,10 @@ func handleHome(ctx *fiber.Ctx) error {
 			templating.MustacheKeyPrefix: "createMT-",
 		},
 	}
-	return ctx.Render("sites/home", binding, templating.LayoutMain)
+}
+
+func handleHome(ctx *fiber.Ctx) error {
+	return ctx.Render("sites/home", homeBindingData(), templating.LayoutMain)
 }
 
 func handleSettings(ctx *fiber.Ctx) error {
diff --git a/internal/server/web/partials/scripts.mustache b/internal/server/web/partials/scripts.mustache
index 36638bfc..d241fb39 100644
--- a/internal/server/web/partials/scripts.mustache
+++ b/internal/server/web/partials/scripts.mustache
@@ -1,3 +1,4 @@
+<script src="{{instance-url}}/static/js/lib/clipboard.min.js"></script>
 <script src="{{instance-url}}/static/js/utils.js"></script>
 <script src="{{instance-url}}/static/js/storage.js"></script>
 <script src="{{instance-url}}/static/js/discovery.js"></script>
@@ -5,14 +6,14 @@
     <script src="{{instance-url}}/static/js/login-check.js"></script>
     {{^logged-in}}
         <script src="{{instance-url}}/static/js/login.js"></script>
+        <script src="{{instance-url}}/static/js/home-not-logged-in.js"></script>
     {{/logged-in}}
     {{#logged-in}}
-        <script src="{{instance-url}}/static/js/lib/clipboard.min.js"></script>
-        <script src="{{instance-url}}/static/js/logged-in-utils.js"></script>
-        <script src="{{instance-url}}/static/js/lib/bootstrap4-toggle.min.js"></script>
         <script src="{{instance-url}}/static/js/logout.js"></script>
+        <script src="{{instance-url}}/static/js/home-logged-in.js"></script>
     {{/logged-in}}
     {{#home}}
+        <script src="{{instance-url}}/static/js/lib/bootstrap4-toggle.min.js"></script>
         <script src="{{instance-url}}/static/js/lib/user-agent.min.js"></script>
         <script src="{{instance-url}}/static/js/mt-helper.js"></script>
         <script src="{{instance-url}}/static/js/home.js"></script>
diff --git a/internal/server/web/partials/style.mustache b/internal/server/web/partials/style.mustache
index 086c622f..b31ca6f1 100644
--- a/internal/server/web/partials/style.mustache
+++ b/internal/server/web/partials/style.mustache
@@ -1,10 +1,6 @@
 <link rel="stylesheet" href="{{instance-url}}/static/css/colors.css">
-{{#logged-in}}
-    <link rel="stylesheet" href="{{instance-url}}/static/css/mytoken-loggedin.css">
-    <link rel="stylesheet" href="{{instance-url}}/static/css/lib/bootstrap4-toggle.min.css">
-{{/logged-in}}
+<link rel="stylesheet" href="{{instance-url}}/static/css/lib/bootstrap4-toggle.min.css">
 {{#consent}}
-    <link rel="stylesheet" href="{{instance-url}}/static/css/lib/bootstrap4-toggle.min.css">
     <link rel="stylesheet" href="{{instance-url}}/static/css/capabilities.css">
 {{/consent}}
 {{#settings-ssh}}
diff --git a/internal/server/web/sites/home.mustache b/internal/server/web/sites/home.mustache
index 1b54e2b0..1b9a1b15 100644
--- a/internal/server/web/sites/home.mustache
+++ b/internal/server/web/sites/home.mustache
@@ -1,33 +1,40 @@
 <div class="card">
     <div class="card-header">
         <ul class="nav nav-tabs card-header-tabs">
+            {{#logged-in}}
+                <li class="nav-item">
+                    <a class="nav-link active" id="at-tab" data-toggle="tab" href="#at" role="tab" aria-controls="at"
+                       aria-selected="true">Access Token</a>
+                </li>
+            {{/logged-in}}
             <li class="nav-item">
-                <a class="nav-link active" id="at-tab" data-toggle="tab" href="#at" role="tab" aria-controls="at"
-                   aria-selected="true">Access Token</a>
-            </li>
-            <li class="nav-item">
-                <a class="nav-link" id="mt-tab" data-toggle="tab" href="#mt" role="tab" aria-controls="mt"
-                   aria-selected="false">Create Mytoken</a>
+                <a class="nav-link{{^logged-in}} active{{/logged-in}}" id="mt-tab" data-toggle="tab" href="#mt"
+                   role="tab" aria-controls="mt" aria-selected="false">Create Mytoken</a>
             </li>
             <li class="nav-item">
                 <a class="nav-link" id="info-tab" data-toggle="tab" href="#info" role="tab" aria-controls="info"
                    aria-selected="false">Tokeninfo</a>
             </li>
-            <li class="nav-item">
-                <a class="nav-link" id="list-mts-tab" data-toggle="tab" href="#list-mts" role="tab"
-                   aria-controls="list-mts" aria-selected="false">My Mytokens</a>
-            </li>
             <li class="nav-item">
                 <a class="nav-link" id="tc-tab" data-toggle="tab" href="#transfer" role="tab"
                    aria-controls="transfer" aria-selected="false">Exchange Transfercode</a>
             </li>
+            {{#logged-in}}
+                <li class="nav-item">
+                    <a class="nav-link" id="list-mts-tab" data-toggle="tab" href="#list-mts" role="tab"
+                       aria-controls="list-mts" aria-selected="false">My Mytokens</a>
+                </li>
+            {{/logged-in}}
         </ul>
     </div>
     <div class="card-body tab-content">
-        <div class="tab-pane show active" id="at" role="tabpanel" aria-labelledby="at-tab">
-            {{> create-at}}
-        </div>
-        <div class="tab-pane bg-secondary break-out" id="mt" role="tabpanel" aria-labelledby="mt-tab">
+        {{#logged-in}}
+            <div class="tab-pane show active" id="at" role="tabpanel" aria-labelledby="at-tab">
+                {{> create-at}}
+            </div>
+        {{/logged-in}}
+        <div class="tab-pane bg-secondary break-out{{^logged-in}} active{{/logged-in}}" id="mt" role="tabpanel"
+             aria-labelledby="mt-tab">
             <div class="bg-secondary ">
                 {{> create-mt}}
             </div>
@@ -35,11 +42,19 @@
         <div class="tab-pane" id="info" role="tabpanel" aria-labelledby="info-tab">
             {{> tokeninfo}}
         </div>
-        <div class="tab-pane" id="list-mts" role="tabpanel" aria-labelledby="list-mts-tab">
-            {{> list-mts}}
-        </div>
         <div class="tab-pane" id="transfer" role="tabpanel" aria-labelledby="tc-tab">
             {{> transfercode}}
         </div>
+        {{#logged-in}}
+            <div class="tab-pane" id="list-mts" role="tabpanel" aria-labelledby="list-mts-tab">
+                {{> list-mts}}
+            </div>
+        {{/logged-in}}
     </div>
-</div>
\ No newline at end of file
+</div>
+
+{{^logged-in}}
+    <script>
+        let cookieLifetime = {{cookie-lifetime}};
+    </script>
+{{/logged-in}}
diff --git a/internal/server/web/sites/index.mustache b/internal/server/web/sites/index.mustache
deleted file mode 100644
index 731309b6..00000000
--- a/internal/server/web/sites/index.mustache
+++ /dev/null
@@ -1,15 +0,0 @@
-<h1>Welcome to the mytoken service</h1>
-
-<p>
-    This is a demo instance of the mytoken service. This service is currently under active development.<br>
-    For more information refer to: <a href="https://github.com/oidc-mytoken/server">https://github.com/oidc-mytoken/server</a>
-</p>
-<p>
-    On this web page you can easily obtain OpenID Connect access tokens. You can do the same on the command line with
-    our
-    <a href="https://github.com/oidc-mytoken/client">command line client</a>.
-</p>
-
-<script>
-    let cookieLifetime = {{cookie-lifetime}};
-</script>
\ No newline at end of file
diff --git a/internal/server/web/static/css/mytoken-loggedin.css b/internal/server/web/static/css/mytoken-loggedin.css
deleted file mode 100644
index 628ca4fa..00000000
--- a/internal/server/web/static/css/mytoken-loggedin.css
+++ /dev/null
@@ -1,56 +0,0 @@
-.hover-text {
-    display: none;
-}
-
-.hover-item:hover .hover-text {
-    display: inline-block;
-}
-
-.hover-item:hover .non-hover-text {
-    display: none;
-}
-
-span.user-agent i + i {
-    padding-left: 1em;
-}
-
-@media (min-width: 1440px) {
-    .break-out {
-        margin: -1.25rem -125px;
-        padding: 1.25rem;
-    }
-}
-
-@media (min-width: 1600px) {
-    .break-out {
-        margin: -1.25rem -225px;
-        padding: 1.25rem;
-    }
-}
-
-.btn-copy {
-    position: absolute;
-    margin-top: -28px;
-    right: -8px;
-}
-
-.btn-copy-inline {
-    position: absolute;
-    right: 8px;
-}
-
-#sshHostConfigCopy {
-    margin-top: 0;
-    right: 15px;
-}
-
-.btn-reload {
-    position: absolute;
-    margin-top: -28px;
-    right: 14px;
-}
-
-.token-fold {
-    cursor: pointer;
-    user-select: none;
-}
\ No newline at end of file
diff --git a/internal/server/web/static/css/mytoken.css b/internal/server/web/static/css/mytoken.css
index 71720f64..9e409844 100644
--- a/internal/server/web/static/css/mytoken.css
+++ b/internal/server/web/static/css/mytoken.css
@@ -74,4 +74,61 @@ hr {
 .svg-icon {
     width: 1em;
     height: 1em;
-}
\ No newline at end of file
+}
+
+.hover-text {
+    display: none;
+}
+
+.hover-item:hover .hover-text {
+    display: inline-block;
+}
+
+.hover-item:hover .non-hover-text {
+    display: none;
+}
+
+span.user-agent i + i {
+    padding-left: 1em;
+}
+
+@media (min-width: 1440px) {
+    .break-out {
+        margin: -1.25rem -125px;
+        padding: 1.25rem;
+    }
+}
+
+@media (min-width: 1600px) {
+    .break-out {
+        margin: -1.25rem -225px;
+        padding: 1.25rem;
+    }
+}
+
+.btn-copy {
+    position: absolute;
+    margin-top: -28px;
+    right: -8px;
+}
+
+.btn-copy-inline {
+    position: absolute;
+    right: 8px;
+}
+
+#sshHostConfigCopy {
+    margin-top: 0;
+    right: 15px;
+}
+
+.btn-reload {
+    position: absolute;
+    margin-top: -28px;
+    right: 14px;
+}
+
+.token-fold {
+    cursor: pointer;
+    user-select: none;
+}
diff --git a/internal/server/web/static/js/home-logged-in.js b/internal/server/web/static/js/home-logged-in.js
new file mode 100644
index 00000000..1e35b3fd
--- /dev/null
+++ b/internal/server/web/static/js/home-logged-in.js
@@ -0,0 +1,9 @@
+$(function () {
+    chainFunctions(
+        checkIfLoggedIn,
+        initAT,
+        initCreateMT,
+        initTokeninfo,
+    );
+    openCorrectTab();
+})
diff --git a/internal/server/web/static/js/home-not-logged-in.js b/internal/server/web/static/js/home-not-logged-in.js
new file mode 100644
index 00000000..76b08b28
--- /dev/null
+++ b/internal/server/web/static/js/home-not-logged-in.js
@@ -0,0 +1,7 @@
+$(function () {
+    chainFunctions(
+        initCreateMT,
+        initTokeninfo,
+    );
+    openCorrectTab();
+})
diff --git a/internal/server/web/static/js/home.js b/internal/server/web/static/js/home.js
index 7dc685c7..203feb71 100644
--- a/internal/server/web/static/js/home.js
+++ b/internal/server/web/static/js/home.js
@@ -1,10 +1,4 @@
-$(function () {
-    chainFunctions(
-        checkIfLoggedIn,
-        initAT,
-        initCreateMT,
-        initTokeninfo,
-    );
+function openCorrectTab() {
     // https://stackoverflow.com/a/17552459
     // Javascript to enable link to tab
     let url = document.location.toString();
@@ -15,7 +9,7 @@ $(function () {
         }
         $('.nav-tabs a[href="#' + hash + '"]').tab('show');
     }
-})
+}
 
 
 // With HTML5 history API, we can easily prevent scrolling!
diff --git a/internal/server/web/static/js/logged-in-utils.js b/internal/server/web/static/js/logged-in-utils.js
deleted file mode 100644
index 60582dd3..00000000
--- a/internal/server/web/static/js/logged-in-utils.js
+++ /dev/null
@@ -1,8 +0,0 @@
-let clipboard = new ClipboardJS('.copier');
-clipboard.on('success', function (e) {
-    e.clearSelection();
-    let el = $(e.trigger);
-    let originalText = el.attr('data-original-title');
-    el.attr('data-original-title', 'Copied!').tooltip('show');
-    el.attr('data-original-title', originalText);
-});
diff --git a/internal/server/web/static/js/utils.js b/internal/server/web/static/js/utils.js
index 2f53d772..63d7b643 100644
--- a/internal/server/web/static/js/utils.js
+++ b/internal/server/web/static/js/utils.js
@@ -109,4 +109,11 @@ function prefixId(id, prefix = "") {
     return '#' + prefix + escapeSelector(id);
 }
 
-
+let clipboard = new ClipboardJS('.copier');
+clipboard.on('success', function (e) {
+    e.clearSelection();
+    let el = $(e.trigger);
+    let originalText = el.attr('data-original-title');
+    el.attr('data-original-title', 'Copied!').tooltip('show');
+    el.attr('data-original-title', originalText);
+});
-- 
GitLab