package conf import ( "apsClient/pkg/convertx" "apsClient/pkg/logx" "apsClient/pkg/mysqlx" "apsClient/pkg/redisx" "flag" "github.com/spf13/viper" "log" ) var ( // config file name configName = "apsClient" // config file paths configPaths = []string{ "./", "../", "./conf", "../conf", } ) type ( Captcha struct { KeyLong int // 验证码长度 ImgWidth int // 验证码宽度 ImgHeight int // 验证码高度 OpenCaptcha int // 防爆破验证码开启此数,0代表每次登录都需要验证码,其他数字代表错误密码次数,如3代表错误三次后出现验证码 OpenCaptchaTimeOut int // 防爆破验证码超时时间,单位:s(秒) } JWT struct { SigningKey string // jwt签名 ExpiresTime string // 过期时间 BufferTime string // 缓冲时间 Issuer string // 签发者 } System struct { Env string // 环境值 develop test public Port int // 端口 DbType string // 数据库类型 UseMultipoint bool // 多点登录拦截 UseRedis bool // 使用redis LimitCountIP int LimitTimeIP int RouterPrefix string // 路由前缀 SudoPassword string // sudo密码 } Etcd struct { Endpoints []string // etcd地址 DialTimeout int // etcd超时时间 KeyPrefix string // etcd key前缀 Tls Tls // etcd tls配置 } Tls struct { CertFile string // 证书文件 KeyFile string // 私钥文件 CaFile string // ca文件 } Rancher struct { Url string // rancher地址 Token string // rancher token } K8s struct { Image string // k8s deployment 镜像 DBHost string // db host ALHost string // al host Host string // host IP string // tmp ip } Services struct { ApsServer string } config struct { // 系统配置 System System // 日志 Log logx.Conf // mysql配置 Mysql mysqlx.Conf // redis配置 Redis redisx.Conf // 验证码 Captcha Captcha // JWT配置 JWT JWT // etcd配置 Etcd Etcd // rancher配置 Rancher Rancher // k8s配置 K8s K8s //Services Address Services Services } ) var ( Conf config Viper *viper.Viper ) func init() { var configFile string flag.StringVar(&configFile, "config", "", "config file in json") flag.Parse() if len(configFile) > 0 { configName = configFile } Viper = viper.New() Viper.SetConfigName(configName) for _, path := range configPaths { Viper.AddConfigPath(path) } if err := Viper.ReadInConfig(); err != nil { log.Fatalf("ReadInConfig err:%v", err) } if err := Viper.Unmarshal(&Conf); err != nil { log.Fatalf("Unmarshal err:%v", err) } ShowConfig() } // WriteConfig 回写配置 func (c *config) WriteConfig() error { cs := convertx.StructToMap(Conf) for k, v := range cs { Viper.Set(k, v) } return Viper.WriteConfig() } func ShowConfig() { log.Println("......................................................") log.Printf(" System: %+v", Conf.System) log.Printf(" Log: %+v", Conf.Log) log.Printf(" Mysql: %+v", Conf.Mysql) log.Printf(" Captcha: %+v", Conf.Captcha) log.Printf(" JWT: %+v", Conf.JWT) log.Printf(" etcd: %+v", Conf.Etcd) log.Printf(" rancher: %+v", Conf.Rancher) log.Printf(" k8s: %+v", Conf.K8s) log.Println("......................................................") }