90 lines
1.9 KiB
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
|
|
}
|