// SetValues set the placeholders values for a given appname and concrete namespace represented as labels // If no labels are provided the "default" label is used func SetValues(s storage.Storage) func(c *gin.Context) { return func(c *gin.Context) { name := c.Param("appname") labels := c.DefaultQuery("labels", "default") body := c.Request.Body x, err := ioutil.ReadAll(body) if err != nil { c.String(http.StatusBadRequest, "Bad request") } else { data := map[string]interface{}{} json.Unmarshal(x, &data) lbls := strings.Split(labels, ",") if len(data) > 0 { //it's a JSON for _, label := range lbls { for k, v := range data { s.SetOption(name, label, k, fmt.Sprint(v)) } } c.String(http.StatusOK, "Ok") } else if strings.Contains(string(x), "=") { pairs := strings.Split(string(x), ",") for _, label := range lbls { for _, v := range pairs { vv := strings.Split(v, "=") s.SetOption(name, label, vv[0], strings.Join(vv[1:], "=")) } } c.String(http.StatusOK, "Ok") } else { c.String(http.StatusBadRequest, "Properties not well-formed") } } } }