126 lines
2.4 KiB
Go
126 lines
2.4 KiB
Go
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.MarshalIndent(config, "", " ")
|
|
}
|