Pass in config struct
This commit is contained in:
parent
8f1105bc59
commit
71f79fd84e
8 changed files with 360 additions and 103 deletions
84
config/config.go
Normal file
84
config/config.go
Normal file
|
@ -0,0 +1,84 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/fsnotify/fsnotify"
|
||||
"github.com/khlieng/dispatch/storage"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Address string
|
||||
Port string
|
||||
Dev bool
|
||||
HexIP bool
|
||||
VerifyCertificates bool `mapstructure:"verify_certificates"`
|
||||
Defaults *Defaults
|
||||
HTTPS *HTTPS
|
||||
LetsEncrypt *LetsEncrypt
|
||||
}
|
||||
|
||||
type Defaults struct {
|
||||
Name string
|
||||
Host string
|
||||
Port int
|
||||
Channels []string
|
||||
Password string
|
||||
SSL bool
|
||||
ReadOnly bool
|
||||
ShowDetails bool `mapstructure:"show_details"`
|
||||
}
|
||||
|
||||
type HTTPS struct {
|
||||
Enabled bool
|
||||
Port string
|
||||
Redirect bool
|
||||
Cert string
|
||||
Key string
|
||||
HSTS *HSTS
|
||||
}
|
||||
|
||||
type HSTS struct {
|
||||
Enabled bool
|
||||
MaxAge string `mapstructure:"max_age"`
|
||||
IncludeSubdomains bool `mapstructure:"include_subdomains"`
|
||||
Preload bool
|
||||
}
|
||||
|
||||
type LetsEncrypt struct {
|
||||
Domain string
|
||||
Email string
|
||||
Port string
|
||||
Proxy bool
|
||||
}
|
||||
|
||||
func LoadConfig() (*Config, chan *Config) {
|
||||
viper.SetConfigName("config")
|
||||
viper.AddConfigPath(storage.Path.Root())
|
||||
viper.ReadInConfig()
|
||||
|
||||
config := &Config{}
|
||||
viper.Unmarshal(config)
|
||||
|
||||
viper.WatchConfig()
|
||||
|
||||
configCh := make(chan *Config, 1)
|
||||
|
||||
prev := time.Now()
|
||||
viper.OnConfigChange(func(e fsnotify.Event) {
|
||||
now := time.Now()
|
||||
// fsnotify sometimes fires twice
|
||||
if now.Sub(prev) > time.Second {
|
||||
config := &Config{}
|
||||
err := viper.Unmarshal(config)
|
||||
if err == nil {
|
||||
configCh <- config
|
||||
}
|
||||
|
||||
prev = now
|
||||
}
|
||||
})
|
||||
|
||||
return config, configCh
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue