package handler import ( "github.com/gofiber/fiber/v2" "git.tukangketik.id/swanadiva/hostkeeper/v2/internal/model" ) var deviceStore = model.NewDeviceStore() var configStore = model.NewConfigStore() func Settings(c *fiber.Ctx) error { return c.Render("settings", fiber.Map{ "View": "settings", "Title": "Settings", "Config": configStore.Get(), "Devices": deviceStore.All(), "NavItems": navItems, }) } func UpdateConfig(c *fiber.Ctx) error { cfg := configStore.Get() if v := c.FormValue("theme"); v != "" { cfg.Theme = v } if v := c.FormValue("fontSize"); v != "" { cfg.FontSize = parseInt(v, 14) } if v := c.FormValue("scrollback"); v != "" { cfg.Scrollback = parseInt(v, 5000) } if v := c.FormValue("autoLock"); v != "" { cfg.AutoLock = parseInt(v, 5) } cfg.Keepalive = c.FormValue("keepalive") == "on" cfg.CopyOnSelect = c.FormValue("copyOnSelect") == "on" cfg.BellEnabled = c.FormValue("bellEnabled") == "on" cfg.AutoReconnect = c.FormValue("autoReconnect") == "on" cfg.BlinkCursor = c.FormValue("blinkCursor") == "on" configStore.Update(cfg) return c.Redirect("/settings", 303) } func parseInt(s string, def int) int { i := 0 for _, c := range s { if c < '0' || c > '9' { return def } i = i*10 + int(c-'0') } if i == 0 { return def } return i }