// GetPlaceHolders return the placeholders that are present in the appname config file func GetPlaceHolders(c *gin.Context) { name := c.Param("appname") myViper, err := readTemplate(name) if err != nil { c.String(http.StatusNotFound, "Config file for %s not found\n", name) } else { properties := placeholders.GetPlaceHolders(myViper) c.IndentedJSON(http.StatusOK, properties) } }
// ReplacePlaceholders generated a config file using the base config file for appname by replacing the possible placeholders // that the config fiel might have given a group of labels. These labels are used to retrieve the placeholders stored values func ReplacePlaceholders(s storage.Storage) func(c *gin.Context) { return func(c *gin.Context) { name := c.Param("appname") labels := c.DefaultQuery("labels", "default") renderType := c.Param("format") list := make(map[string]*placeholders.Placeholder) myViper, err := readTemplate(name) if err != nil { c.String(http.StatusNotFound, "") } else { properties := placeholders.GetPlaceHolders(myViper) for _, v := range properties.Placeholders { list[v.PlaceHolder] = v } lbls := strings.Split(labels, ",") // MERGE values of different labels, last overrides current value for _, label := range lbls { l := s.GetOptions(name, label) for k, v := range l { if list[k] != nil { list[k].PropertyValue = v } } } template := replaceTemplatePlaceHolders(myViper, list) extension := getFileExtension(myViper) replacedViper := viper.New() replacedViper.SetConfigType(extension) replacedViper.ReadConfig(bytes.NewBuffer([]byte(template))) b, err := render(replacedViper, renderType) if err == nil { c.Data(http.StatusOK, "text/plain", b) } if err != nil { c.String(http.StatusInternalServerError, "Could not render %s", err) } } } }