54 lines
1022 B
Go
54 lines
1022 B
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
type Config struct {
|
|
Server string
|
|
Port uint16
|
|
Username string
|
|
Privkey string
|
|
Nick string
|
|
Channel string
|
|
}
|
|
|
|
func LoadConfigFile(path string) (Config, error) {
|
|
viper.SetDefault("Server", "tilde.town")
|
|
viper.SetDefault("Port", 22)
|
|
|
|
viper.SetConfigName("config")
|
|
viper.SetConfigType("toml")
|
|
viper.AddConfigPath(".")
|
|
viper.AddConfigPath(os.ExpandEnv("$HOME/.config/hubbub"))
|
|
if path != "" {
|
|
viper.SetConfigFile(path)
|
|
}
|
|
|
|
var config Config
|
|
if err := viper.ReadInConfig(); err != nil {
|
|
return config, err
|
|
}
|
|
if err := viper.Unmarshal(&config); err != nil {
|
|
return config, err
|
|
}
|
|
|
|
if config.Username == "" {
|
|
return config, errors.New("username is required")
|
|
}
|
|
if config.Privkey == "" {
|
|
return config, errors.New("privkey is required")
|
|
}
|
|
if config.Nick == "" {
|
|
return config, errors.New("nick is required")
|
|
}
|
|
if config.Channel == "" {
|
|
return config, errors.New("channel is required")
|
|
}
|
|
|
|
return config, nil
|
|
}
|