package main import ( "encoding/json" "io/ioutil" "net/http" "kumoly.io/tools/configui/configui" ) func ListFiles(w http.ResponseWriter, r *http.Request) { data, err := json.Marshal(files) if err != nil { AbortError(w, err) return } w.Write(data) } func GetFile(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get("name") file, ok := files[name] if name == "" || !ok { MakeResponse(w, 404, []byte("file not found")) return } data, err := file.Read() if err != nil { AbortError(w, err) return } response, err := json.Marshal(map[string]string{ "path": file.Path, "name": file.Alias, "action": file.Action, "data": string(data), }) if err != nil { AbortError(w, err) return } w.Header().Set("Content-Type", "application/json") w.Write(response) } func PostFile(w http.ResponseWriter, r *http.Request) { data, err := ioutil.ReadAll(r.Body) r.Body.Close() if err != nil { AbortError(w, err) return } f := configui.File{} if err := json.Unmarshal(data, &f); err != nil { AbortError(w, err) return } file, ok := files[f.Alias] if !ok { MakeResponse(w, 404, []byte("file not found")) return } if err := file.Write([]byte(f.Data)); err != nil { AbortError(w, err) return } w.Write([]byte("ok")) } func Apply(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get("name") file, ok := files[name] if name == "" || !ok { MakeResponse(w, 404, []byte("file not found")) return } result, err := file.Do() if err != nil { AbortError(w, err) return } w.Write([]byte(result)) } func Download(w http.ResponseWriter, r *http.Request) { fs := []string{} for _, v := range files { fs = append(fs, v.Path) } w.Header().Set("Content-Disposition", `attachment; filename="export.tar.gz"`) bundle(w, fs, false) } func LoadConfig(w http.ResponseWriter, r *http.Request) { data, err := ioutil.ReadAll(r.Body) r.Body.Close() if err != nil { AbortError(w, err) return } ftmp, err := configui.ReadConfig(string(data)) if err != nil { AbortError(w, err) return } files = configui.GetFileMap(ftmp) w.Write([]byte("ok")) } func getConfigHandler(w http.ResponseWriter, r *http.Request) { data, err := GetConfig() if err != nil { AbortError(w, err) return } w.Write(data) } func GetConfig() ([]byte, error) { config := []configui.File{} for _, f := range files { config = append(config, *f) } return json.Marshal(config) }