package admin import ( "errors" "net/http" "os" "runtime" "git.pyer.club/kingecg/gohttpd/model" "git.pyer.club/kingecg/gohttpd/server" ) type RunStatus struct { Goroutines int `json:"goroutines"` } func about(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("About Page")) } func setConfig(w http.ResponseWriter, r *http.Request) { ctx := r.Context() ctxData := ctx.Value(server.RequestCtxKey("data")).(map[string]interface{}) data, ok := ctxData["data"] if !ok { w.WriteHeader(http.StatusBadRequest) return } t := data.(model.HttpServerConfig) if t.Name == "admin" { w.WriteHeader(http.StatusForbidden) resp := server.NewErrorResult(errors.New("不能通过api设置管理服务器")) w.Write(resp) } err := model.SetServerConfig(&t) if err != nil { w.WriteHeader(http.StatusBadRequest) w.Write(server.NewErrorResult(err)) return } defer func() { os.Exit(0) }() w.WriteHeader(http.StatusOK) w.Write(server.NewSuccessResult(t)) } func getServerConfigure(w http.ResponseWriter, r *http.Request) { ctx := r.Context() ctxData := ctx.Value(server.RequestCtxKey("data")).(map[string]interface{}) id, ok := ctxData["id"] if ok { if id.(string) == "admin" { w.WriteHeader(http.StatusForbidden) resp := server.NewErrorResult(errors.New("不能通过api获取管理服务器配置信息")) w.Write(resp) return } data := model.GetServerConfig(id.(string)) /// configContent, _ := json.Marshal(data) w.WriteHeader(http.StatusOK) w.Write(server.NewSuccessResult(data)) } else { http.NotFound(w, r) } } func getStatus(w http.ResponseWriter, r *http.Request) { //获取当前进程的goroutines数量 ret := RunStatus{ Goroutines: runtime.NumGoroutine(), } w.WriteHeader(http.StatusOK) w.Write(server.NewSuccessResult(ret)) } var AdminServerMux *server.RestMux func init() { AdminServerMux = server.NewRestMux("/api") AdminServerMux.Use(server.BasicAuth) AdminServerMux.HandleFunc("GET", "/about", http.HandlerFunc(about)) postConfigRoute := AdminServerMux.HandleFunc("POST", "/config", http.HandlerFunc(setConfig)) postConfigRoute.Add(server.Parse[model.HttpServerConfig]) AdminServerMux.HandleFunc("GET", "/config/:id", http.HandlerFunc(getServerConfigure)) AdminServerMux.HandleFunc("GET", "/status", http.HandlerFunc(getStatus)) AdminServerMux.Use(server.BasicAuth) }