83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
package conf
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/pkg/errors"
|
|
log "github.com/sirupsen/logrus"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var C *Config
|
|
|
|
// WechatAppID = "wx45745a8c51091ae0"
|
|
// WechatAppSecret = "2ab33bc79d9b47efa4abef19d66e1977"
|
|
// WechatToken = "W8Xhw5TivYBgY"
|
|
// WechatAesKey = "F6AqCxAV4W1eCrY6llJ2zapphKK49CQN3RgtPDrjhnI"
|
|
type Config struct {
|
|
Debug bool `mapstructure:"debug"`
|
|
Port uint `mapstructure:"port"`
|
|
Database Database `mapstructure:"database"`
|
|
Wechat Wechat `mapstructure:"wechat"`
|
|
}
|
|
|
|
type Database struct {
|
|
Database string `mapstructure:"database"`
|
|
Username string `mapstructure:"username"`
|
|
Password string `mapstructure:"password"`
|
|
Host string `mapstructure:"host"`
|
|
Port uint `mapstructure:"port"`
|
|
SslMode string `mapstructure:"ssl_mode"`
|
|
TimeZone string `mapstructure:"time_zone"`
|
|
}
|
|
|
|
func (m Database) DSN() string {
|
|
tpl := "host=%s port=%d user=%s password=%s dbname=%s sslmode=%s TimeZone=%s"
|
|
if m.Username == "" {
|
|
m.Username = "postgres"
|
|
}
|
|
|
|
if m.Port == 0 {
|
|
m.Port = 5432
|
|
}
|
|
|
|
if m.SslMode == "" {
|
|
m.SslMode = "disable"
|
|
}
|
|
|
|
if m.TimeZone == "" {
|
|
m.TimeZone = "Asia/Shanghai"
|
|
}
|
|
|
|
return fmt.Sprintf(tpl, m.Host, m.Port, m.Username, m.Password, m.Database, m.SslMode, m.TimeZone)
|
|
}
|
|
|
|
type Wechat struct {
|
|
AppID string `mapstructure:"app_id"`
|
|
AppSecret string `mapstructure:"app_secret"`
|
|
Token string `mapstructure:"token"`
|
|
AesKey string `mapstructure:"aes_key"`
|
|
}
|
|
|
|
func Load(file string) error {
|
|
viper.SetConfigType("yaml")
|
|
if file != "" {
|
|
viper.SetConfigFile(file)
|
|
} else {
|
|
viper.SetConfigName("config")
|
|
viper.AddConfigPath(".")
|
|
}
|
|
|
|
log.Infof("load config file")
|
|
if err := viper.ReadInConfig(); err != nil {
|
|
return errors.Wrap(err, "read config file")
|
|
}
|
|
log.Infof("use config file: %s", viper.ConfigFileUsed())
|
|
|
|
if err := viper.Unmarshal(&C); err != nil {
|
|
return errors.Wrap(err, "unmarshal config")
|
|
}
|
|
|
|
return nil
|
|
}
|