diff --git a/admin/admin.go b/admin/admin.go index bbeca30..6e012eb 100644 --- a/admin/admin.go +++ b/admin/admin.go @@ -28,19 +28,32 @@ func setConfig(c *gin.Context) { 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 + t, ok := data.(model.HttpServerConfig) + if ok { + 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 + } + } else { + tcpProxy, ok := data.(model.TcpProxyConfig) + if ok { + er := model.SetTcpProxyConfig(&tcpProxy) + 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)) } diff --git a/model/model.go b/model/model.go index 50e45dc..3bdbb61 100644 --- a/model/model.go +++ b/model/model.go @@ -62,19 +62,19 @@ type JwtConfig struct { } type GoHttpdConfig struct { - Logging gologger.LoggersConfig `json:"logging"` - Admin *HttpServerConfig `json:"admin"` - IncludDir string `json:"includs"` - Servers []*HttpServerConfig `json:"servers"` - TcpProxys []*TcpProxyConfig `json:"tcp_proxys"` + Logging gologger.LoggersConfig `json:"logging"` + Admin *HttpServerConfig `json:"admin"` + IncludDir string `json:"includs"` + Servers []*HttpServerConfig `json:"servers"` + TcpProxys []*TcpProxyConfig `json:"tcp_proxys"` } // TcpProxyConfig TCP代理服务器配置 type TcpProxyConfig struct { - Name string `json:"name"` // 代理名称 - Listen string `json:"listen"` // 监听地址,格式如 "0.0.0.0:8080" - Target string `json:"target"` // 目标服务器地址,格式如 "192.168.1.1:3306" - Enabled bool `json:"enabled"` // 是否启用 + Name string `json:"name"` // 代理名称 + Listen string `json:"listen"` // 监听地址,格式如 "0.0.0.0:8080" + Target string `json:"target"` // 目标服务器地址,格式如 "192.168.1.1:3306" + Enabled bool `json:"enabled"` // 是否启用 } var DefaultAdminConfig HttpServerConfig = HttpServerConfig{ @@ -114,6 +114,32 @@ func SetServerConfig(c *HttpServerConfig) error { } return nil } +func SetTcpProxyConfig(c *TcpProxyConfig) error { + l := gologger.GetLogger("model") + updated := false + for i, s := range Config.TcpProxys { + if s.Name == c.Name { + Config.TcpProxys[i] = c + updated = true + break + } + } + if !updated { + Config.TcpProxys = append(Config.TcpProxys, c) + } + configFile := utils.NormalizePath("./config.json") + configsStr, err := json.Marshal(Config) + if err != nil { + l.Error("Save config error:", err) + return err + } + werr := os.WriteFile(configFile, configsStr, 0644) + if werr != nil { + l.Error("Save config error:", werr) + return werr + } + return nil +} func GetServerConfig(name string) *HttpServerConfig { for _, s := range Config.Servers {