gohttp/model/model.go

90 lines
1.9 KiB
Go

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"`
Directives []string `json:"directives"`
}
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"`
Directives []string `json:"directives"`
}
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
}