|
|
|
package cmd
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
"github.com/spf13/viper"
|
|
|
|
|
|
|
|
"github.com/noerw/osem_notify/utils"
|
|
|
|
)
|
|
|
|
|
|
|
|
// initConfig reads in config file and ENV variables if set.
|
|
|
|
func initConfig() {
|
|
|
|
theConfig := cfgFile
|
|
|
|
if cfgFile == "" {
|
|
|
|
theConfig = utils.GetConfigFile("osem_notify")
|
|
|
|
}
|
|
|
|
|
|
|
|
viper.SetConfigType("yaml")
|
|
|
|
viper.SetConfigFile(theConfig)
|
|
|
|
viper.SetEnvPrefix("OSEM_NOTIFY") // keys only work in upper case
|
|
|
|
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_"))
|
|
|
|
viper.AutomaticEnv() // WARNING: OSEM_NOTIFIY_CONFIG will not be considered this way. but why should it..
|
|
|
|
|
|
|
|
// If a config file is found, read it in.
|
|
|
|
if _, err := os.Stat(theConfig); err == nil {
|
|
|
|
err := viper.ReadInConfig()
|
|
|
|
if err != nil {
|
|
|
|
log.Error("Error when reading config file:", err)
|
|
|
|
}
|
|
|
|
} else if cfgFile != "" {
|
|
|
|
log.Error("Specified config file not found!")
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
validateConfig()
|
|
|
|
}
|
|
|
|
|
|
|
|
func validateConfig() {
|
|
|
|
transport := viper.GetString("defaultHealthchecks.notifications.transport")
|
|
|
|
if viper.GetBool("notify") && transport == "email" {
|
|
|
|
if len(viper.GetStringSlice("defaultHealthchecks.notifications.options.recipients")) == 0 {
|
|
|
|
log.Warn("No recipients set up for transport email")
|
|
|
|
}
|
|
|
|
|
|
|
|
emailRequired := []string{
|
|
|
|
viper.GetString("email.host"),
|
|
|
|
viper.GetString("email.port"),
|
|
|
|
viper.GetString("email.user"),
|
|
|
|
viper.GetString("email.pass"),
|
|
|
|
viper.GetString("email.from"),
|
|
|
|
}
|
|
|
|
for _, conf := range emailRequired {
|
|
|
|
if conf == "" {
|
|
|
|
log.Error("Default transport set as email, but missing email config")
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|