package main import ( "fmt" "net/http" "strconv" "strings" "github.com/spf13/viper" "gopkg.in/macaron.v1" ) func outletsPage(ctx *macaron.Context) { ctx.Data["outlets"] = outlets ctx.HTML(200, "outlets") } type OutletPostForm struct { Description string `form:"description" binding:"Required"` OnBoot string `form:"onboot" binding:"Required"` } func outletEditPage(ctx *macaron.Context) { var err error var num uint64 var o Outlet num, err = strconv.ParseUint(ctx.Params(":num"), 10, 64) if err != nil { ctx.JSON(http.StatusOK, Dictionary{ "result": "error", "error": err.Error(), }) return } o = outlets[num] ctx.Data["outlet"] = o ctx.Data["onboot_values"] = []string{"on", "off", "last"} ctx.HTML(200, "outlet_edit") } func outletEditPost(ctx *macaron.Context, f OutletPostForm) { var err error var num uint64 num, err = strconv.ParseUint(ctx.Params(":num"), 10, 64) if err != nil { ctx.JSON(http.StatusOK, Dictionary{ "result": "error", "error": err.Error(), }) return } onboot := "on" onbootForm := strings.ToLower(strings.TrimSpace(f.OnBoot)) switch onbootForm { case "on", "off", "last": onboot = onbootForm default: outletsPage(ctx) return } outlets[num].Channel.OnBoot = onboot s1 := fmt.Sprintf("boards.%s.channels.%s.onboot", outlets[num].Board.ID, outlets[num].Channel.ID) viper.Set(s1, onboot) outlets[num].Description = strings.TrimSpace(f.Description) s2 := fmt.Sprintf("outlets.%s.description", outlets[num].ID) viper.Set(s2, outlets[num].Description) viper.WriteConfig() ctx.Redirect("/outlets") }