package model import ( "encoding/json" "os" "git.pyer.club/kingecg/gohttpd/utils" "git.pyer.club/kingecg/gologger" ) type HttpPath struct { Path string `json:"path"` Root string `json:"root"` Default string `json:"default"` Upstreams []string `json:"upstreams"` Rewrite PathRewrite `json:"pathrewrite"` Headers []HeaderDefine `json:"headers"` } type PathRewrite struct { Replace string `json:"replace"` With string `json:"with"` } type HeaderDefine struct { Name string `json:"name"` Value string `json:"value"` } type HeaderValueConst string const ( ProxyHost HeaderValueConst = "$ProxyHost" ) type HttpServerConfig struct { Name string `json:"name"` ServerName string `json:"server"` Port int `json:"port"` Host string `json:"host"` Paths []HttpPath Username string `json:"username"` Password string `json:"password"` CertFile string `json:"certfile"` KeyFile string `json:"keyfile"` } type GoHttpdConfig struct { Logging gologger.LoggersConfig `json:"logging"` Admin *HttpServerConfig `json:"admin"` Servers []*HttpServerConfig `json:"servers"` } var DefaultAdminConfig HttpServerConfig = HttpServerConfig{ ServerName: "admin", Port: 8080, } var Config GoHttpdConfig = GoHttpdConfig{} func GetConfig() *GoHttpdConfig { return &Config } func SetServerConfig(c *HttpServerConfig) error { l := gologger.GetLogger("model") updated := false for i, s := range Config.Servers { if s.Name == c.Name { Config.Servers[i] = c updated = true break } } if !updated { Config.Servers = append(Config.Servers, 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 { if s.Name == name { return s } } return nil }