diff options
author | Julien Dessaux | 2025-01-30 00:19:16 +0100 |
---|---|---|
committer | Julien Dessaux | 2025-01-30 00:19:16 +0100 |
commit | 98c7d6f5785182117b9fe6ebd6b892f860bc2024 (patch) | |
tree | 261f22399f8f3fce71a2e1c4fc79314c2a8c5efd /pkg/webui/settings.go | |
parent | fix(webui): fix invalid session cookie handling (diff) | |
download | tfstated-98c7d6f5785182117b9fe6ebd6b892f860bc2024.tar.gz tfstated-98c7d6f5785182117b9fe6ebd6b892f860bc2024.tar.bz2 tfstated-98c7d6f5785182117b9fe6ebd6b892f860bc2024.zip |
feat(webui): bootstrap account settings management with light and dark mode
Diffstat (limited to '')
-rw-r--r-- | pkg/webui/settings.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/pkg/webui/settings.go b/pkg/webui/settings.go new file mode 100644 index 0000000..eb0910f --- /dev/null +++ b/pkg/webui/settings.go @@ -0,0 +1,53 @@ +package webui + +import ( + "html/template" + "net/http" + + "git.adyxax.org/adyxax/tfstated/pkg/database" + "git.adyxax.org/adyxax/tfstated/pkg/model" +) + +type SettingsPage struct { + Page *Page + Settings *model.Settings +} + +var settingsTemplates = template.Must(template.ParseFS(htmlFS, "html/base.html", "html/settings.html")) + +func handleSettingsGET(db *database.DB) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + settings := r.Context().Value(model.SettingsContextKey{}).(*model.Settings) + render(w, settingsTemplates, http.StatusOK, SettingsPage{ + Page: makePage(r, &Page{Title: "Settings", Section: "settings"}), + Settings: settings, + }) + }) +} + +func handleSettingsPOST(db *database.DB) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if err := r.ParseForm(); err != nil { + errorResponse(w, http.StatusBadRequest, err) + return + } + darkMode := r.FormValue("dark-mode") + settings := model.Settings{ + LightMode: darkMode != "1", + } + account := r.Context().Value(model.AccountContextKey{}).(*model.Account) + err := db.SaveAccountSettings(account, &settings) + if err != nil { + errorResponse(w, http.StatusInternalServerError, err) + return + } + render(w, settingsTemplates, http.StatusOK, SettingsPage{ + Page: &Page{ + LightMode: settings.LightMode, + Title: "Settings", + Section: "settings", + }, + Settings: &settings, + }) + }) +} |