in server/config.go [41:88]
func configCmd(w http.ResponseWriter, r *http.Request) {
var err error
s := configReq{}
g := config.AppConfigODS{}
ct, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type"))
if r.FormValue("cmd") == "get" {
var b []byte
b, err = yaml.Marshal(config.Get().AppConfigODS)
if err == nil {
w.Header().Set("Content-Type", "application/x-yaml")
_, _ = w.Write(b)
}
} else { // set
switch {
case ct == "application/x-www-form-urlencoded", ct == "multipart/form-data", ct == "":
if len(r.FormValue("body")) == 0 {
err = errors.New("config body is empty")
} else {
err = yaml.Unmarshal([]byte(r.FormValue("body")), &g)
}
case ct == "application/x-yaml", ct == "text/vnd.yaml":
if r.Body == nil {
err = errors.New("config body is empty")
} else {
err = yaml.NewDecoder(r.Body).Decode(&g)
}
case ct == "application/json":
if r.Body == nil {
err = errors.New("config body is empty")
} else {
err = json.NewDecoder(r.Body).Decode(&g)
}
default:
code := http.StatusUnsupportedMediaType
http.Error(w, http.StatusText(code), code)
return
}
if err == nil {
if err = config.Set(&g); err == nil {
err = config.Save()
}
}
}
if err != nil {
log.Errorf("Config http: cmd=%v, body='%v', error=%v", s.Cmd, g, err)
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}