func configAdminRoutes() { http.HandleFunc("/exit", func(w http.ResponseWriter, r *http.Request) { if g.IsTrustable(r.RemoteAddr) { w.Write([]byte("exiting...")) go func() { time.Sleep(time.Second) os.Exit(0) }() } else { w.Write([]byte("no privilege")) } }) http.HandleFunc("/config/reload", func(w http.ResponseWriter, r *http.Request) { if g.IsTrustable(r.RemoteAddr) { g.ParseConfig(g.ConfigFile) RenderDataJson(w, g.Config()) } else { w.Write([]byte("no privilege")) } }) http.HandleFunc("/workdir", func(w http.ResponseWriter, r *http.Request) { RenderDataJson(w, file.SelfDir()) }) http.HandleFunc("/ips", func(w http.ResponseWriter, r *http.Request) { RenderDataJson(w, g.TrustableIps()) }) }
func configRunRoutes() { http.HandleFunc("/run", func(w http.ResponseWriter, r *http.Request) { if g.IsTrustable(r.RemoteAddr) { if r.ContentLength == 0 { http.Error(w, "body is blank", http.StatusBadRequest) return } bs, err := ioutil.ReadAll(r.Body) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } body := string(bs) out, err := sys.CmdOutBytes("sh", "-c", body) if err != nil { w.Write([]byte("exec fail: " + err.Error())) return } w.Write(out) } else { w.Write([]byte("no privilege")) } }) }