summaryrefslogtreecommitdiff
path: root/pkg/webui/settings.go
diff options
context:
space:
mode:
authorJulien Dessaux2025-01-30 00:19:16 +0100
committerJulien Dessaux2025-01-30 00:19:16 +0100
commit98c7d6f5785182117b9fe6ebd6b892f860bc2024 (patch)
tree261f22399f8f3fce71a2e1c4fc79314c2a8c5efd /pkg/webui/settings.go
parentfix(webui): fix invalid session cookie handling (diff)
downloadtfstated-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.go53
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,
+ })
+ })
+}