package config import ( "strings" "github.com/sirupsen/logrus" "github.com/spf13/pflag" "github.com/spf13/viper" ) // Backend contains backend connection-specific configuration type Backend struct { Addr string `mapstructure:"addr"` Secured bool `mapstructure:"secured"` Headers map[string]string `mapstructure:"headers"` } // Content contains content-specific configuration type Content struct { Backend Backend `mapstructure:"backend"` Key string `mapstructure:"key"` Pinned string `mapstructure:"pinned"` PostsPerPage int `mapstructure:"postsPerPage"` } type Site struct { YandexKey string `mapstructure:"yandexKey"` } // Config contains application configuration type Config struct { Verbose string `mapstructure:"verbose"` Base string `mapstructure:"base"` Addr string `mapstructure:"addr"` Unix string `mapstructure:"unix"` Content Content `mapstructure:"content"` Site Site `mapstructure:"site"` } // initialize default values on app-start func init() { pflag.BoolP("version", "V", false, "get application version") pflag.BoolP("verbose", "v", false, "enable verbose logging") pflag.StringP("config", "c", string("frontend.yaml"), "config file path") pflag.String("addr", "127.0.0.1:8000", "tcp addr to listen") pflag.String("unix", "", "unix socket path to listen") pflag.String("base", "", "http URI prefix") pflag.StringToString("content.backend.headers", nil, "map of additional headers to send") pflag.String("content.backend.addr", "demo.ghost.io:443", "ghost backend addr") pflag.Bool("content.backend.secured", true, "is ghost backend secured") pflag.String("content.key", "22444f78447824223cefc48062", "ghost content api key") pflag.String("content.pinned", "contact", "pinned page slug") pflag.Int("content.postsPerPage", 5, "amount of posts per page") pflag.String("site.yandexKey", "", "yandex analytics key") pflag.Parse() viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) viper.AutomaticEnv() viper.BindPFlags(pflag.CommandLine) if viper.GetBool("verbose") { logrus.SetLevel(logrus.DebugLevel) logrus.Debug("Verbose mode") } }