package main import ( // "errors" "fmt" // "github.com/davecgh/go-spew/spew" "os" "strings" "github.com/spf13/cobra" "github.com/spf13/viper" ) const ( programBinary string = "kiwimix" ) var ( // ALLOWED_AUTH_TYPES = []string{"none", "plain", "login"} // ALLOWED_SECURITY_TYPES = []string{"none", "tls", "starttls"} ) // Config type Config struct { // EmailFrom string `mapstructure:"email-from"` // EmailTo []string `mapstructure:"email-to"` // EmailSubject string `mapstructure:"email-subject"` // SMTPHostname string `mapstructure:"smtp-hostname"` // SMTPPort uint16 `mapstructure:"smtp-port"` // SMTPUsername string `mapstructure:"smtp-username"` // SMTPPassword string `mapstructure:"smtp-password"` // SMTPAuthType string `mapstructure:"smtp-auth-type"` // SMTPSecurityType string `mapstructure:"smtp-security-type"` // TrelloURL string `mapstructure:"trello-url"` // TrelloAPIKey string `mapstructure:"trello-api-key"` // TrelloToken string `mapstructure:"trello-token"` Parser *cobra.Command `mapstructure:"-"` } // NewConfig : create configuration object func NewConfig() *Config { config := &Config{} cmd := &cobra.Command{ Use: programBinary, Run: func(cmd *cobra.Command, args []string) { /* placeholder */ }, } viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_")) viper.AutomaticEnv() // cmd.PersistentFlags().StringVarP(&config.EmailFrom, "email-from", "", "", "address of sender") // cmd.PersistentFlags().StringArrayVarP(&config.EmailTo, "email-to", "", []string{}, "address(es) of recipient(s)") // cmd.PersistentFlags().StringVarP(&config.EmailSubject, "email-subject", "", "", "email subject") // cmd.PersistentFlags().StringVarP(&config.TrelloURL, "trello-url", "", "", "url of trello board") // cmd.PersistentFlags().StringVarP(&config.TrelloURL, "trello-api-key", "", "", "API KEY for trello access") // cmd.PersistentFlags().StringVarP(&config.TrelloToken, "trello-token", "", "", "TOKEN for trello access") // cmd.PersistentFlags().StringVarP(&config.SMTPHostname, "smtp-hostname", "", "", "address of smtp server") // cmd.PersistentFlags().StringVarP(&config.SMTPUsername, "smtp-username", "", "", "username for smtp server") // cmd.PersistentFlags().StringVarP(&config.SMTPPassword, "smtp-password", "", "", "password for smtp server") // cmd.PersistentFlags().Uint16VarP(&config.SMTPPort, "smtp-port", "", 25, "port for smtp server") // cmd.PersistentFlags().StringVarP(&config.SMTPAuthType, "smtp-auth-type", "", "", "authentication type for smtp server") // cmd.PersistentFlags().StringVarP(&config.SMTPSecurityType, "smtp-security-type", "", "", "security type for smtp server") // viper.BindPFlag("email-from", cmd.PersistentFlags().Lookup("email-from")) // viper.BindPFlag("email-to", cmd.PersistentFlags().Lookup("email-to")) // viper.BindPFlag("email-subject", cmd.PersistentFlags().Lookup("email-subject")) // viper.BindPFlag("trello-url", cmd.PersistentFlags().Lookup("trello-url")) // viper.BindPFlag("trello-token", cmd.PersistentFlags().Lookup("trello-token")) // viper.BindPFlag("trello-api-key", cmd.PersistentFlags().Lookup("trello-api-key")) // viper.BindPFlag("smtp-hostname", cmd.PersistentFlags().Lookup("smtp-hostname")) // viper.BindPFlag("smtp-username", cmd.PersistentFlags().Lookup("smtp-username")) // viper.BindPFlag("smtp-password", cmd.PersistentFlags().Lookup("smtp-password")) // viper.BindPFlag("smtp-port", cmd.PersistentFlags().Lookup("smtp-port")) // viper.BindPFlag("smtp-auth-type", cmd.PersistentFlags().Lookup("smtp-auth-type")) // viper.BindPFlag("smtp-security-type", cmd.PersistentFlags().Lookup("smtp-security-type")) config.Parser = cmd return config } // Parse : handle command line options func (config *Config) Parse() error { // set config defaults // persistent flags // environment & config // viper.SetEnvPrefix("") if err := config.Parser.Execute(); err != nil { fmt.Println(err) os.Exit(1) } showHelp, _ := config.Parser.Flags().GetBool("help") if showHelp { os.Exit(0) } if err := viper.Unmarshal(&config); err != nil { panic("Unable to unmarshal config") } // spew.Dump(config) return nil }