90 lines
1.6 KiB
Go
90 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.sr.ht/~emersion/go-scfg"
|
|
)
|
|
|
|
type config struct {
|
|
HTTPAddress string
|
|
LogLevel string
|
|
User string
|
|
Password string
|
|
ntfy ntfyConfig
|
|
}
|
|
|
|
type ntfyConfig struct {
|
|
Topic string
|
|
User string
|
|
Password string
|
|
}
|
|
|
|
func readConfig(path string) (*config, error) {
|
|
cfg, err := scfg.Load(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
config := new(config)
|
|
// Set default values
|
|
config.HTTPAddress = "127.0.0.1:8080"
|
|
config.LogLevel = "info"
|
|
|
|
d := cfg.Get("log-level")
|
|
if d != nil {
|
|
if err := d.ParseParams(&config.LogLevel); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
d = cfg.Get("http-address")
|
|
if d != nil {
|
|
if err := d.ParseParams(&config.HTTPAddress); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
d = cfg.Get("user")
|
|
if d != nil {
|
|
if err := d.ParseParams(&config.User); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
d = cfg.Get("password")
|
|
if d != nil {
|
|
if err := d.ParseParams(&config.Password); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
ntfyDir := cfg.Get("ntfy")
|
|
if ntfyDir == nil {
|
|
return nil, fmt.Errorf("%q directive missing", "ntfy")
|
|
}
|
|
|
|
d = ntfyDir.Children.Get("topic")
|
|
if d == nil {
|
|
return nil, fmt.Errorf("%q missing from %q directive", "topic", "ntfy")
|
|
}
|
|
if err := d.ParseParams(&config.ntfy.Topic); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
d = ntfyDir.Children.Get("user")
|
|
if d != nil {
|
|
if err := d.ParseParams(&config.ntfy.User); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
d = ntfyDir.Children.Get("password")
|
|
if d != nil {
|
|
if err := d.ParseParams(&config.ntfy.Password); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return config, nil
|
|
}
|