From 240fb5f97f6dda132520f31709d71a72dad296c7 Mon Sep 17 00:00:00 2001
From: Stephan Richter <s.richter@srsoftware.de>
Date: Sun, 20 Oct 2024 20:35:11 +0200
Subject: [PATCH 1/6] gui improvements

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
---
 .../src/main/resources/de/authorization.html                | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/de.srsoftware.oidc.web/src/main/resources/de/authorization.html b/de.srsoftware.oidc.web/src/main/resources/de/authorization.html
index 0533750..a6a1e3e 100644
--- a/de.srsoftware.oidc.web/src/main/resources/de/authorization.html
+++ b/de.srsoftware.oidc.web/src/main/resources/de/authorization.html
@@ -11,16 +11,16 @@
 <body>
     <nav></nav>
     <div id="content" style="display: none">
-        Eine vertrauende Seite, <span id="rp">unknown</span>, hat Zugriff auf die folgenden Informationen erfragt:
+        <p>Eine vertrauende Seite, <span id="rp">unknown</span>, hat Zugriff auf die folgenden Informationen erfragt:</p>
         <ul id="scopes">
 
         </ul>
-        Stimmen Sie zu, diese Informationen mit <span id="rp2">unknown</span> zu teilen?
+        <p>Stimmen Sie zu, diese Informationen mit <span id="rp2">unknown</span> zu teilen?</p>
         <button type="button" onclick="grantAutorization(1)">Ja - für einen Tag</button>
         <button type="button" onclick="grantAutorization(7)">Ja - für eine Woche</button>
         <button type="button" onclick="grantAutorization(30)">Ja - für einen Monat</button>
         <button type="button" onclick="grantAutorization(365)">Ja - für ein Jahr</button>
-        <button type="button" onclick="denyAutorization()">No</button>
+        <button type="button" onclick="denyAutorization()">Nein</button>
     </div>
     <div id="error_missing_parameter" class="error" style="display: none">
         Request enthält den benötigten Parameter "<span id="parameter"></span>" nicht!

From 2fbb9803fb2d4cf83b0b2bcbbd5caed869e59434 Mon Sep 17 00:00:00 2001
From: Stephan Richter <s.richter@srsoftware.de>
Date: Sun, 20 Oct 2024 20:45:39 +0200
Subject: [PATCH 2/6] extended translations

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
---
 de.srsoftware.oidc.web/src/main/resources/de/scopes/email.html   | 1 +
 de.srsoftware.oidc.web/src/main/resources/de/scopes/openid.html  | 1 +
 de.srsoftware.oidc.web/src/main/resources/de/scopes/profile.html | 1 +
 de.srsoftware.oidc.web/src/main/resources/en/scopes/profile.html | 1 +
 4 files changed, 4 insertions(+)
 create mode 100644 de.srsoftware.oidc.web/src/main/resources/de/scopes/email.html
 create mode 100644 de.srsoftware.oidc.web/src/main/resources/de/scopes/openid.html
 create mode 100644 de.srsoftware.oidc.web/src/main/resources/de/scopes/profile.html
 create mode 100644 de.srsoftware.oidc.web/src/main/resources/en/scopes/profile.html

diff --git a/de.srsoftware.oidc.web/src/main/resources/de/scopes/email.html b/de.srsoftware.oidc.web/src/main/resources/de/scopes/email.html
new file mode 100644
index 0000000..d905564
--- /dev/null
+++ b/de.srsoftware.oidc.web/src/main/resources/de/scopes/email.html
@@ -0,0 +1 @@
+<li>Ihre Email-Adresse</li>
\ No newline at end of file
diff --git a/de.srsoftware.oidc.web/src/main/resources/de/scopes/openid.html b/de.srsoftware.oidc.web/src/main/resources/de/scopes/openid.html
new file mode 100644
index 0000000..6c29a88
--- /dev/null
+++ b/de.srsoftware.oidc.web/src/main/resources/de/scopes/openid.html
@@ -0,0 +1 @@
+<li>Ihre OpenID – damit wirst du bei der vertrauenden Website identifiziert</li>
\ No newline at end of file
diff --git a/de.srsoftware.oidc.web/src/main/resources/de/scopes/profile.html b/de.srsoftware.oidc.web/src/main/resources/de/scopes/profile.html
new file mode 100644
index 0000000..4122b66
--- /dev/null
+++ b/de.srsoftware.oidc.web/src/main/resources/de/scopes/profile.html
@@ -0,0 +1 @@
+<li>Zugriff auf Ihren Klar-Namen</li>
\ No newline at end of file
diff --git a/de.srsoftware.oidc.web/src/main/resources/en/scopes/profile.html b/de.srsoftware.oidc.web/src/main/resources/en/scopes/profile.html
new file mode 100644
index 0000000..0f54bba
--- /dev/null
+++ b/de.srsoftware.oidc.web/src/main/resources/en/scopes/profile.html
@@ -0,0 +1 @@
+<li>Access your display name</li>
\ No newline at end of file

From 7da96e98b0bf59d0cfed7f455c4c2c27db3b679e Mon Sep 17 00:00:00 2001
From: Stephan Richter <s.richter@srsoftware.de>
Date: Sun, 20 Oct 2024 21:59:18 +0200
Subject: [PATCH 3/6] implemented sending media type on token request (and
 others)

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
---
 .../src/main/java/de/srsoftware/http/PathHandler.java            | 1 +
 .../src/main/java/de/srsoftware/oidc/backend/UserController.java | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/de.srsoftware.http/src/main/java/de/srsoftware/http/PathHandler.java b/de.srsoftware.http/src/main/java/de/srsoftware/http/PathHandler.java
index 6c3afc0..f1d5bb9 100644
--- a/de.srsoftware.http/src/main/java/de/srsoftware/http/PathHandler.java
+++ b/de.srsoftware.http/src/main/java/de/srsoftware/http/PathHandler.java
@@ -178,6 +178,7 @@ public abstract class PathHandler implements HttpHandler {
 			if (o instanceof List<?> list) o = new JSONArray(list);
 			if (o instanceof Map<?, ?> map) o = new JSONObject(map);
 			if (o instanceof Error<?> error) o = error.json();
+			if (o instanceof JSONObject) ex.getResponseHeaders().add(CONTENT_TYPE, JSON);
 			return sendContent(ex, status, o.toString().getBytes(UTF_8));
 		}
 
diff --git a/de.srsoftware.oidc.backend/src/main/java/de/srsoftware/oidc/backend/UserController.java b/de.srsoftware.oidc.backend/src/main/java/de/srsoftware/oidc/backend/UserController.java
index f915fe8..52e945a 100644
--- a/de.srsoftware.oidc.backend/src/main/java/de/srsoftware/oidc/backend/UserController.java
+++ b/de.srsoftware.oidc.backend/src/main/java/de/srsoftware/oidc/backend/UserController.java
@@ -21,7 +21,6 @@ import jakarta.mail.*;
 import jakarta.mail.internet.*;
 import java.io.IOException;
 import java.time.Duration;
-import java.util.Comparator;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;

From 414d943bb2ada73f15e63db1dd3b05205f4ce231 Mon Sep 17 00:00:00 2001
From: Stephan Richter <s.richter@srsoftware.de>
Date: Mon, 21 Oct 2024 12:08:10 +0200
Subject: [PATCH 4/6] GUI improvements

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
---
 .../src/main/resources/de/authorization.html  | 26 ++++++-------------
 .../src/main/resources/en/authorization.html  | 22 +++++-----------
 2 files changed, 14 insertions(+), 34 deletions(-)

diff --git a/de.srsoftware.oidc.web/src/main/resources/de/authorization.html b/de.srsoftware.oidc.web/src/main/resources/de/authorization.html
index a6a1e3e..bbdafd1 100644
--- a/de.srsoftware.oidc.web/src/main/resources/de/authorization.html
+++ b/de.srsoftware.oidc.web/src/main/resources/de/authorization.html
@@ -11,32 +11,22 @@
 <body>
     <nav></nav>
     <div id="content" style="display: none">
-        <p>Eine vertrauende Seite, <span id="rp">unknown</span>, hat Zugriff auf die folgenden Informationen erfragt:</p>
+        <p>Eine vertrauende Seite, <span id="rp">unbekannt</span>, hat Zugriff auf die folgenden Informationen erfragt:</p>
         <ul id="scopes">
 
         </ul>
-        <p>Stimmen Sie zu, diese Informationen mit <span id="rp2">unknown</span> zu teilen?</p>
+        <p>Stimmen Sie zu, diese Informationen mit <span id="rp2">unbekannt</span> zu teilen?</p>
         <button type="button" onclick="grantAutorization(1)">Ja - für einen Tag</button>
         <button type="button" onclick="grantAutorization(7)">Ja - für eine Woche</button>
         <button type="button" onclick="grantAutorization(30)">Ja - für einen Monat</button>
         <button type="button" onclick="grantAutorization(365)">Ja - für ein Jahr</button>
         <button type="button" onclick="denyAutorization()">Nein</button>
     </div>
-    <div id="error_missing_parameter" class="error" style="display: none">
-        Request enthält den benötigten Parameter "<span id="parameter"></span>" nicht!
-    </div>
-    <div id="error_unknown_client" class="error" style="display: none">
-        Client "<span id="client_id"></span>" ist dem Backend nicht bekannt!
-    </div>
-    <div id="error_unsupported_response_type" class="error" style="display: none">
-        Rückgabe-Typ "<span id="response_type"></span>" wird nicht unterstützt!
-    </div>
-    <div id="error_missing_code" class="error">
-        Fehlender Rückgabe-Typ: code
-    </div>
-    <div id="error_invalid_redirect" class="error" style="display: none">
-        Ungültige Umleitung: <span id="redirect_uri"></span>
-    </div>
-    <div id="missing_scopes" class="error" style="display: none">Authorisierungs-Quelle lieferte weder eine Liste von <em>nicht-autorisierten Scopes</em> noch eine Liste von <em>authorisierten Scopes</em>! Das ist ein Server-Fehler.</div>
+    <div class="error" style="display: none" id="error_missing_parameter">Request enthält den benötigten Parameter "<span id="parameter"></span>" nicht!</div>
+    <div class="error" style="display: none" id="error_unknown_client">Client "<span id="client_id"></span>" ist dem Backend nicht bekannt!</div>
+    <div class="error" style="display: none" id="error_unsupported_response_type">Rückgabe-Typ "<span id="response_type"></span>" wird nicht unterstützt!</div>
+    <div class="error" style="display: none" id="error_missing_code">Fehlender Rückgabe-Typ: code</div>
+    <div class="error" style="display: none" id="error_invalid_redirect">Ungültige Umleitung: <span id="redirect_uri"></span></div>
+    <div class="error" style="display: none" id="missing_scopes">Authorisierungs-Quelle lieferte weder eine Liste von <em>nicht-autorisierten Scopes</em> noch eine Liste von <em>authorisierten Scopes</em>! Das ist ein Server-Fehler.</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/de.srsoftware.oidc.web/src/main/resources/en/authorization.html b/de.srsoftware.oidc.web/src/main/resources/en/authorization.html
index b8b29a1..623031f 100644
--- a/de.srsoftware.oidc.web/src/main/resources/en/authorization.html
+++ b/de.srsoftware.oidc.web/src/main/resources/en/authorization.html
@@ -22,21 +22,11 @@
         <button type="button" onclick="grantAutorization(365)">Yes - for 1 year</button>
         <button type="button" onclick="denyAutorization()">No</button>
     </div>
-    <div id="error_missing_parameter" class="error" style="display: none">
-        Request does not contain required parameter "<span id="parameter"></span>"!
-    </div>
-    <div id="error_unknown_client" class="error" style="display: none">
-        Client "<span id="client_id"></span>" unknown to backend!
-    </div>
-    <div id="error_unsupported_response_type" class="error" style="display: none">
-        Response type "<span id="response_type"></span>" not supported!
-    </div>
-    <div id="error_missing_code" class="error">
-        Missing response type: code
-    </div>
-    <div id="error_invalid_redirect" class="error" style="display: none">
-        invalid redirect: <span id="redirect_uri"></span>
-    </div>
-    <div id="missing_scopes" class="error" style="display: none">Authorization resource contained neither list of <em>unauthorized scopes</em> nor list of <em>authorized scopes</em>! This is a server problem.</div>
+    <div class="error" style="display: none" id="error_missing_parameter">Request does not contain required parameter "<span id="parameter"></span>"!</div>
+    <div class="error" style="display: none" id="error_unknown_client">Client "<span id="client_id"></span>" unknown to backend!</div>
+    <div class="error" style="display: none" id="error_unsupported_response_type">Response type "<span id="response_type"></span>" not supported!</div>
+    <div class="error" style="display: none" id="error_missing_code">Missing response type: code</div>
+    <div class="error" style="display: none" id="error_invalid_redirect">invalid redirect: <span id="redirect_uri"></span></div>
+    <div class="error" style="display: none" id="missing_scopes">Authorization resource contained neither list of <em>unauthorized scopes</em> nor list of <em>authorized scopes</em>! This is a server problem.</div>
 </body>
 </html>
\ No newline at end of file

From 3b6e951ccdca83665b834930565b237fe1fc27ae Mon Sep 17 00:00:00 2001
From: Stephan Richter <s.richter@srsoftware.de>
Date: Mon, 21 Oct 2024 23:04:01 +0200
Subject: [PATCH 5/6] improving clients page

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
---
 .../main/java/de/srsoftware/oidc/datastore/file/FileStore.java  | 2 +-
 de.srsoftware.oidc.web/src/main/resources/en/scripts/clients.js | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/de.srsoftware.oidc.datastore.file/src/main/java/de/srsoftware/oidc/datastore/file/FileStore.java b/de.srsoftware.oidc.datastore.file/src/main/java/de/srsoftware/oidc/datastore/file/FileStore.java
index 8e2ba9e..1348ef9 100644
--- a/de.srsoftware.oidc.datastore.file/src/main/java/de/srsoftware/oidc/datastore/file/FileStore.java
+++ b/de.srsoftware.oidc.datastore.file/src/main/java/de/srsoftware/oidc/datastore/file/FileStore.java
@@ -84,7 +84,7 @@ public class FileStore implements AuthorizationService, ClientService, SessionSe
 							client.remove(scope);
 						}
 					}
-					if (client.isEmpty()) clients.remove(clientId);
+					// if (client.isEmpty()) clients.remove(clientId); // keep client as mark for ClientController.dash
 				}
 				if (clients.isEmpty()) authorizations.remove(userId);
 			}
diff --git a/de.srsoftware.oidc.web/src/main/resources/en/scripts/clients.js b/de.srsoftware.oidc.web/src/main/resources/en/scripts/clients.js
index 1739337..46b08eb 100644
--- a/de.srsoftware.oidc.web/src/main/resources/en/scripts/clients.js
+++ b/de.srsoftware.oidc.web/src/main/resources/en/scripts/clients.js
@@ -28,7 +28,7 @@ function handleClients(response){
 }
 
 function link(url){
-    return url ? '<a href="'+url+'">'+url.split('?')[0]+'</a>': "";
+    return url ? '<a href="'+url+'" target="_blank">'+url.split('?')[0]+'</a>': "";
 }
 
 function handleRemove(response){

From 44d7dfe2675560ea5163a653b9331daf32405219 Mon Sep 17 00:00:00 2001
From: Stephan Richter <s.richter@srsoftware.de>
Date: Tue, 22 Oct 2024 08:52:00 +0200
Subject: [PATCH 6/6] updated todo

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
---
 de.srsoftware.oidc.web/src/main/resources/en/todo.html | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/de.srsoftware.oidc.web/src/main/resources/en/todo.html b/de.srsoftware.oidc.web/src/main/resources/en/todo.html
index 1473642..51782d2 100644
--- a/de.srsoftware.oidc.web/src/main/resources/en/todo.html
+++ b/de.srsoftware.oidc.web/src/main/resources/en/todo.html
@@ -13,8 +13,9 @@
         <div id="content">
             <h1>to do…</h1>
             <ul>
-	      <li>implement token refresh</li>
-              <li>Configuration im Frontend</li>
+                <li>implement token refresh</li>
+                <li>Configuration im Frontend</li>
+                <li>TOTP authentifizierung</li>
             </ul>
         </div>
     </body>