parent
539bdbf25e
commit
0a750b700f
|
@ -1 +1,5 @@
|
||||||
# 0.1.0
|
# 0.1.2
|
||||||
|
|
||||||
|
## Feature
|
||||||
|
|
||||||
|
* Save config back to file
|
||||||
|
|
41
api.go
41
api.go
|
@ -4,6 +4,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
|
|
||||||
"kumoly.io/tools/configui/configui"
|
"kumoly.io/tools/configui/configui"
|
||||||
)
|
)
|
||||||
|
@ -11,8 +12,7 @@ import (
|
||||||
func ListFiles(w http.ResponseWriter, r *http.Request) {
|
func ListFiles(w http.ResponseWriter, r *http.Request) {
|
||||||
data, err := json.Marshal(files)
|
data, err := json.Marshal(files)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
w.Write(data)
|
w.Write(data)
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,7 @@ func GetFile(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
data, err := file.Read()
|
data, err := file.Read()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
response, err := json.Marshal(map[string]string{
|
response, err := json.Marshal(map[string]string{
|
||||||
"path": file.Path,
|
"path": file.Path,
|
||||||
|
@ -36,8 +35,7 @@ func GetFile(w http.ResponseWriter, r *http.Request) {
|
||||||
"data": string(data),
|
"data": string(data),
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
w.Write(response)
|
w.Write(response)
|
||||||
|
@ -47,13 +45,11 @@ func PostFile(w http.ResponseWriter, r *http.Request) {
|
||||||
data, err := ioutil.ReadAll(r.Body)
|
data, err := ioutil.ReadAll(r.Body)
|
||||||
r.Body.Close()
|
r.Body.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
f := configui.File{}
|
f := configui.File{}
|
||||||
if err := json.Unmarshal(data, &f); err != nil {
|
if err := json.Unmarshal(data, &f); err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
file, ok := files[f.Alias]
|
file, ok := files[f.Alias]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -61,8 +57,7 @@ func PostFile(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err := file.Write([]byte(f.Data)); err != nil {
|
if err := file.Write([]byte(f.Data)); err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
w.Write([]byte("ok"))
|
w.Write([]byte("ok"))
|
||||||
}
|
}
|
||||||
|
@ -76,8 +71,7 @@ func Apply(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
result, err := file.Do()
|
result, err := file.Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
w.Write([]byte(result))
|
w.Write([]byte(result))
|
||||||
}
|
}
|
||||||
|
@ -93,19 +87,23 @@ func Download(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
func LoadConfig(w http.ResponseWriter, r *http.Request) {
|
func LoadConfig(w http.ResponseWriter, r *http.Request) {
|
||||||
if flagNoReconfig {
|
if flagNoReconfig {
|
||||||
AbortError(w, "system reconfig is disabled")
|
panic("system reconfig is disabled")
|
||||||
return
|
|
||||||
}
|
}
|
||||||
data, err := ioutil.ReadAll(r.Body)
|
data, err := ioutil.ReadAll(r.Body)
|
||||||
r.Body.Close()
|
r.Body.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
ftmp, err := configui.ReadConfig(string(data))
|
ftmp, err := configui.ReadConfig(string(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
}
|
||||||
|
if flagConfigPath != "" {
|
||||||
|
info, err := os.Stat(flagConfigPath)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
os.WriteFile(flagConfigPath, data, info.Mode())
|
||||||
}
|
}
|
||||||
files = configui.GetFileMap(ftmp)
|
files = configui.GetFileMap(ftmp)
|
||||||
w.Write([]byte("ok"))
|
w.Write([]byte("ok"))
|
||||||
|
@ -114,8 +112,7 @@ func LoadConfig(w http.ResponseWriter, r *http.Request) {
|
||||||
func getConfigHandler(w http.ResponseWriter, r *http.Request) {
|
func getConfigHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
data, err := GetConfig()
|
data, err := GetConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
w.Write(data)
|
w.Write(data)
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ type File struct {
|
||||||
Alias string `json:"name"`
|
Alias string `json:"name"`
|
||||||
Action string `json:"action"`
|
Action string `json:"action"`
|
||||||
RO bool `json:"ro"`
|
RO bool `json:"ro"`
|
||||||
|
Lang string `json:"lang"`
|
||||||
|
|
||||||
// used for parsing post data
|
// used for parsing post data
|
||||||
Data string `json:"data"`
|
Data string `json:"data"`
|
||||||
|
|
|
@ -54,7 +54,7 @@ func AbortError(w http.ResponseWriter, err interface{}) (int, error) {
|
||||||
func Catch(rw *ResponseWriter, r *http.Request) {
|
func Catch(rw *ResponseWriter, r *http.Request) {
|
||||||
ex := recover()
|
ex := recover()
|
||||||
if ex != nil {
|
if ex != nil {
|
||||||
AbortError(rw, r)
|
AbortError(rw, ex)
|
||||||
log.Printf("%s %s %d %s %s\n", GetIP(r), r.Method, rw.StatueCode, r.URL, r.Header.Get("User-Agent"))
|
log.Printf("%s %s %d %s %s\n", GetIP(r), r.Method, rw.StatueCode, r.URL, r.Header.Get("User-Agent"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,8 +102,7 @@ func Parse(w http.ResponseWriter, name string, data interface{}) error {
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
err := tmpl.ExecuteTemplate(buf, "home", data)
|
err := tmpl.ExecuteTemplate(buf, "home", data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
AbortError(w, err)
|
panic(err)
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
_, err = w.Write(buf.Bytes())
|
_, err = w.Write(buf.Bytes())
|
||||||
return err
|
return err
|
||||||
|
|
4
route.go
4
route.go
|
@ -75,11 +75,15 @@ func setRoutes(mux *http.ServeMux) {
|
||||||
tmp, err = file.Read()
|
tmp, err = file.Read()
|
||||||
data.File.Action = file.Action
|
data.File.Action = file.Action
|
||||||
data.File.Alias = file.Alias
|
data.File.Alias = file.Alias
|
||||||
|
if file.Lang != "" {
|
||||||
|
data.Editor.Lang = file.Lang
|
||||||
|
} else {
|
||||||
ext := strings.TrimPrefix(filepath.Ext(file.Path), ".")
|
ext := strings.TrimPrefix(filepath.Ext(file.Path), ".")
|
||||||
if ext2mode[ext] != "" {
|
if ext2mode[ext] != "" {
|
||||||
ext = ext2mode[ext]
|
ext = ext2mode[ext]
|
||||||
}
|
}
|
||||||
data.Editor.Lang = ext
|
data.Editor.Lang = ext
|
||||||
|
}
|
||||||
data.File.RO = file.RO
|
data.File.RO = file.RO
|
||||||
data.File.Path = file.Path
|
data.File.Path = file.Path
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue