initial commit
This commit is contained in:
75
conf/funcs.go
Normal file
75
conf/funcs.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package conf
|
||||
|
||||
import (
|
||||
`encoding/json`
|
||||
|
||||
"github.com/BurntSushi/toml"
|
||||
"github.com/creasty/defaults"
|
||||
"github.com/goccy/go-yaml"
|
||||
"r00t2.io/sysutils/paths"
|
||||
)
|
||||
|
||||
func NewConfig(path string) (cfg *Config, err error) {
|
||||
|
||||
var b []byte
|
||||
|
||||
if err = paths.RealPath(&path); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
cfg, err = NewConfigFromBytes(b)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func NewConfigFromBytes(b []byte) (cfg *Config, err error) {
|
||||
|
||||
if err = json.Unmarshal(b, &cfg); err != nil {
|
||||
if err = yaml.Unmarshal(b, &cfg); err != nil {
|
||||
if err = toml.Unmarshal(b, &cfg); err != nil {
|
||||
if err = toml.Unmarshal(b, &cfg); err != nil {
|
||||
err = ErrUnkownSyntax
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err = defaults.Set(cfg); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if cfg.CacheDB != ":memory:" {
|
||||
if err = paths.RealPath(&cfg.CacheDB); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if err = validate.Struct(cfg); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, t := range cfg.Tunnels {
|
||||
t.cfg = cfg
|
||||
if t.Username == nil {
|
||||
if cfg.Username == nil {
|
||||
err = ErrMissingUser
|
||||
return
|
||||
} else {
|
||||
t.Username = cfg.Username
|
||||
}
|
||||
}
|
||||
if t.TemplateConfigs != nil && len(t.TemplateConfigs) > 0 {
|
||||
for _, tpl := range t.TemplateConfigs {
|
||||
if err = paths.RealPath(&tpl.Template); err != nil {
|
||||
return
|
||||
}
|
||||
if err = paths.RealPath(&tpl.Dest); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user