diff --git a/main.go b/main.go index 85badf9..79aa464 100644 --- a/main.go +++ b/main.go @@ -225,6 +225,19 @@ func adminHandler(w http.ResponseWriter, r *http.Request) { } } +func settingsHandler(w http.ResponseWriter, r *http.Request) { + user := r.Header.Get("Remote-User") + groups := r.Header.Get("Remote-Groups") + isAdmin := strings.Contains(groups, "admins") + + tmpl := template.Must(template.New("settings").Parse(settingsHTML)) + w.Header().Set("Content-Type", "text/html; charset=utf-8") + tmpl.Execute(w, map[string]interface{}{ + "User": user, + "IsAdmin": isAdmin, + }) +} + // --- Templates --- const landingPageHTML = ` @@ -316,9 +329,9 @@ const launcherHTML = `

{{.AppName}}

{{.Description}}

-
+
Welcome, {{.User}} - {{if .IsAdmin}}Admin Panel{{end}} + ⚙ Settings Logout
@@ -337,6 +350,48 @@ const launcherHTML = ` ` +const settingsHTML = ` + + + + + Settings — NextWorkspace + + + +
+

Settings

+ Back to Launcher +
+
+
+

Account

+

Logged in as {{.User}}

+
+ {{if .IsAdmin}} +
+

Administration

+

Manage users, groups, and workspace configuration.

+ ⚖ Admin Panel → +
+ {{end}} +
+ +` + const adminHTML = ` @@ -477,6 +532,10 @@ func main() { mux.Handle("/home/", authMiddleware(launcherHandler(cfg, apps))) mux.Handle("/home", authMiddleware(launcherHandler(cfg, apps))) + // Protected: settings + mux.Handle("/settings", authMiddleware(settingsHandler)) + mux.Handle("/settings/", authMiddleware(settingsHandler)) + // Protected: admin — admins only mux.Handle("/config", adminGroupMiddleware(authMiddleware(adminHandler))) mux.Handle("/config/", adminGroupMiddleware(authMiddleware(adminHandler)))