package admin import ( "errors" "net/http" "runtime" "git.pyer.club/kingecg/gohttpd/model" "git.pyer.club/kingecg/gohttpd/server" "github.com/gin-gonic/gin" // 添加Gin框架导入 ) type RunStatus struct { Goroutines int `json:"goroutines"` } func about(c *gin.Context) { c.Writer.WriteHeader(http.StatusOK) c.Writer.Write([]byte("About Page")) } func setConfig(c *gin.Context) { ctx := c.Request.Context() ctxData := ctx.Value(server.RequestCtxKey("data")).(map[string]interface{}) data, ok := ctxData["data"] if !ok { c.Writer.WriteHeader(http.StatusBadRequest) return } t := data.(model.HttpServerConfig) if t.Name == "admin" { c.Writer.WriteHeader(http.StatusForbidden) resp := server.NewErrorResult(errors.New("不能通过api设置管理服务器")) c.Writer.Write(resp) return } er := model.SetServerConfig(&t) if er != nil { c.Writer.WriteHeader(http.StatusBadRequest) c.Writer.Write(server.NewErrorResult(er)) return } c.Writer.WriteHeader(http.StatusOK) c.Writer.Write(server.NewSuccessResult(t)) } func getServerConfigure(c *gin.Context) { // ctx := c.Request.Context() // get url param // g. //ctxData := ctx.Value(server.RequestCtxKey("data")).(map[string]interface{}) id := c.Param("name") if id != "" { if id == "admin" { c.Writer.WriteHeader(http.StatusForbidden) resp := server.NewErrorResult(errors.New("不能通过api获取管理服务器配置信息")) c.Writer.Write(resp) return } data := model.GetServerConfig(id) c.Writer.WriteHeader(http.StatusOK) c.Writer.Write(server.NewSuccessResult(data)) } else { http.NotFound(c.Writer, c.Request) } } func getStatus(c *gin.Context) { runtime := runtime.NumGoroutine() ret := RunStatus{ Goroutines: runtime, } c.Writer.WriteHeader(http.StatusOK) c.Writer.Write(server.NewSuccessResult(ret)) } func stop(c *gin.Context) { // ctx := c.Request.Context() // ctxData := ctx.Value(server.RequestCtxKey("data")).(map[string]interface{}) name := c.Param("name") if name != "" { serverConf := model.GetServerConfig(name) server.StopServer(name, serverConf.Port) c.Writer.WriteHeader(http.StatusOK) data := "stopped" c.Writer.Write(server.NewSuccessResult(data)) return } http.NotFound(c.Writer, c.Request) } func start(c *gin.Context) { name := c.Param("name") if name != "" { serverConf := model.GetServerConfig(name) server.StartServer(name, serverConf.Port) c.Writer.WriteHeader(http.StatusOK) data := "started" c.Writer.Write(server.NewSuccessResult(data)) return } } var AdminServerMux *gin.Engine // InitAdminApi 初始化管理API路由 // 参数: // // conf: 指向HttpServerConfig的指针,包含服务器配置信息。 // // 返回值: // // 无直接返回值,初始化全局AdminServerMux变量。 func InitAdminApi(conf *model.HttpServerConfig) { // 创建Gin路由器实例 router := gin.Default() // 根据认证类型添加中间件 if conf.AuthType == "jwt" { router.Use(jwtAuth) // 使用JWT认证中间件 } else if conf.AuthType == "basic" { router.Use(ginBashiAuth) // 使用基础认证中间件 } // 注册路由处理函数 api := router.Group("/") { api.GET("about", about) configGroup := api.Group("config") { configGroup.POST("", setConfig) configGroup.GET(":name", getServerConfigure) } api.GET("status", getStatus) serverGroup := api.Group("server") { serverGroup.POST("stop/:name", stop) serverGroup.POST("start/:name", start) } api.POST("login", login) } // 将路由器赋值给全局变量 AdminServerMux = router }