From ff9b1e112ed14746ed74dfff1fb4c19efd5502d4 Mon Sep 17 00:00:00 2001
From: Tim <contact@bytim.eu>
Date: Sat, 19 Apr 2025 12:16:15 +0200
Subject: Add user information settings

---
 VPNAuth.Server/Pages/Dashboard.cshtml | 57 ++++++++++++++++++++++++++++++-----
 1 file changed, 50 insertions(+), 7 deletions(-)

(limited to 'VPNAuth.Server/Pages/Dashboard.cshtml')

diff --git a/VPNAuth.Server/Pages/Dashboard.cshtml b/VPNAuth.Server/Pages/Dashboard.cshtml
index cb00d9f..38f9c7e 100644
--- a/VPNAuth.Server/Pages/Dashboard.cshtml
+++ b/VPNAuth.Server/Pages/Dashboard.cshtml
@@ -1,13 +1,20 @@
 @page "/"
-@using Microsoft.EntityFrameworkCore.ChangeTracking
 @using VPNAuth.Server
 @using VPNAuth.Server.Database
 
 @{
     Layout = null;
-    
+
     string remoteIp = Request.HttpContext.GetRemoteIpAddress();
-    ConfigUser? user = Request.HttpContext.GetUser();
+    ConfigUser? configUser = Request.HttpContext.GetUser();
+
+    UserInformation? dbUser = null;
+
+    if (configUser != null)
+    {
+        using var db = new Database();
+        dbUser = db.UserInformation.Where(user => user.Sub == configUser!.Username).ToList().FirstOrDefault();
+    }
 }
 
 <!DOCTYPE html>
@@ -17,7 +24,7 @@
     <title>VPNAuth - Dashboard</title>
 </head>
 <body style="text-align: center;">
-    @if (user == null)
+    @if (configUser == null)
     {
         <p>No user detected</p>
     }
@@ -26,16 +33,52 @@
         <div>
             <h1>Dashboard</h1>
             <h2>VPNAuth</h2>
-            <p>Hey, @user.Username!</p>
-            <i>User settings coming soon...</i>
+            <p>Hey, @configUser.Username!</p>
+            <h3>User settings</h3>
+            <form hx-post="/user-info" hx-swap="none" hx-trigger="change">
+                <table style="margin-left: auto; margin-right: auto;">
+                    <tbody>
+                        <tr>
+                            <th>Username</th>
+                            <th style="text-align: left; font-weight: normal;">@dbUser?.Sub</th>
+                        </tr>
+                        <tr>
+                            <th><label for="given-name">Given name</label></th>
+                            <th><input name="given-name" id="given-name" type="text"
+                                       value="@dbUser?.GivenName"/></th>
+                        </tr>
+                        <tr>
+                            <th><label for="family-name">Family name</label></th>
+                            <th><input name="family-name" id="family-name" type="text"
+                                       value="@dbUser?.FamilyName"/></th>
+                        </tr>
+                        <tr>
+                            <th><label for="preferred-username">Preferred username</label></th>
+                            <th><input name="preferred-username" id="preferred-username" type="text"
+                                       value="@dbUser?.PreferredUsername"/></th>
+                        </tr>
+                        <tr>
+                            <th><label for="email">Email</label></th>
+                            <th><input name="email" id="email" type="email"
+                                       value="@dbUser?.Email"/></th>
+                        </tr>
+                        <tr>
+                            <th><label for="email">Picture URL</label></th>
+                            <th><input name="picture" id="picture" type="url"
+                                       value="@dbUser?.Picture"/></th>
+                        </tr>
+                    </tbody>
+                </table>
+            </form>
             <h3>Your IPs</h3>
             <ul style="list-style-position: inside;">
-                @foreach (var ip in user.Ips!)
+                @foreach (var ip in configUser.Ips!)
                 {
                     <li>@ip</li>
                 }
             </ul>
         </div>
     }
+    <script src="/static/htmx.js"></script>
 </body>
 </html>
-- 
cgit v1.2.3