package config import ( "crypto/rsa" "gitee.com/xuyiping_admin/pkg/di" "os" "strings" "sync" ) var ( Module = di.Provide(Options) options *AppConfig appEnv string initOnce sync.Once ) // AppConfig store all configuration options type AppConfig struct { AppName string `yaml:"app_name"` AppEnv string `yaml:"app_environment"` Debug bool `yaml:"debug" env:"APP_DEBUG"` HTTPServerAddr string `yaml:"http_server_addr" env:"HTTP_SERVER_ADDR"` // 数据库配置 额外加载文件部分 database.yaml StoreSetting StoreSetting `json:"storeSetting" yaml:"store"` // redis 配置 RedisSetting RedisSetting `json:"RedisSetting" yaml:"redis_setting"` JwtSecret string `json:"jwtSecret" yaml:"jwt_secret"` ExcelSetting ExcelSetting `json:"excelSetting" yaml:"excel_setting"` WechatSetting WechatSetting `json:"wechatSetting" yaml:"wechat_setting"` JwtTokenKeyConfig JwtTokenKeyConfig `json:"jwtTokenKeyConfig"` JwtExpireTime int `json:"jwtExpireTime" yaml:"jwt_expire_time"` } type JwtTokenKeyConfig struct { PrivateKey *rsa.PrivateKey `json:"privateKey"` PublicKey *rsa.PublicKey `json:"publicKey"` } type WechatSetting struct { Appid string `yaml:"appid"` Secret string `yaml:"secret"` } type ExcelSetting struct { SheetName string `yaml:"sheet_name"` // = "Sheet1" //默认Sheet名称 Height float64 `yaml:"height"` // = 25.0 //默认行高度 } // StoreSetting 数据库配置 type StoreSetting struct { // 开启 SyDb SQL 记录 DriverName string `yaml:"driver_name" json:"driver_name"` ShowSQL bool `yaml:"show_sql" env:"STORE_SHOW_SQL"` KptEventDSNRW string `yaml:"kpt_tmr_group_rw" env:"LINGO_COURSE_DSN_RW"` KptEventDSNMigr string `yaml:"kpt_tmr_group_migr" env:"LINGO_COURSE_DSN_MIGR"` } type RedisSetting struct { // sso 配置 SSOCache SSOCache `json:"SSOCache" yaml:"sso_cache"` } type SSOCache struct { Addr string `json:"addr" yaml:"addr"` Requirepass string `json:"requirepass" yaml:"requirepass"` DB int `json:"DB" yaml:"DB"` Expiry int `json:"expiry" yaml:"expiry"` } func Options() *AppConfig { return options } func init() { appEnv = strings.ToLower(os.Getenv("APP_ENVIRONMENT")) cfg := &AppConfig{} var err error initOnce.Do(func() { switch appEnv { default: err = Initialize("app.test.yaml", cfg) case "develop": err = Initialize("app.develop.yaml", cfg) case "production": err = Initialize("app.production.yaml", cfg) } if err != nil { panic(err) } cfg.JwtTokenKeyConfig = openPrivateKey() options = cfg }) }