package conf import ( "github.com/HFO4/cloudreve/pkg/util" "github.com/go-ini/ini" "github.com/mojocn/base64Captcha" "gopkg.in/go-playground/validator.v8" ) // database 数据库 type database struct { Type string User string Password string Host string Name string TablePrefix string } // system 系统通用配置 type system struct { Debug bool SessionSecret string } // captcha 验证码配置 type captcha struct { Height int `validate:"gte=0"` Width int `validate:"gte=0"` Mode int `validate:"gte=0,lte=3"` ComplexOfNoiseText int `validate:"gte=0,lte=2"` ComplexOfNoiseDot int `validate:"gte=0,lte=2"` IsShowHollowLine bool IsShowNoiseDot bool IsShowNoiseText bool IsShowSlimeLine bool IsShowSineLine bool CaptchaLen int `validate:"gt=0"` } // DatabaseConfig 数据库配置 var DatabaseConfig = &database{ Type: "UNSET", } // SystemConfig 系统公用配置 var SystemConfig = &system{ Debug: false, } // CaptchaConfig 验证码配置 var CaptchaConfig = &captcha{ Height: 60, Width: 240, Mode: 3, ComplexOfNoiseText: base64Captcha.CaptchaComplexLower, ComplexOfNoiseDot: base64Captcha.CaptchaComplexLower, IsShowHollowLine: false, IsShowNoiseDot: false, IsShowNoiseText: false, IsShowSlimeLine: false, IsShowSineLine: false, CaptchaLen: 6, } var cfg *ini.File // Init 初始化配置文件 func Init(path string) { var err error //TODO 配置文件不存在时创建 //TODO 配置合法性验证 cfg, err = ini.Load(path) if err != nil { util.Log().Panic("无法解析配置文件 '%s': %s", path, err) } sections := map[string]interface{}{ "Database": DatabaseConfig, "System": SystemConfig, "Captcha": CaptchaConfig, } for sectionName, sectionStruct := range sections { err = mapSection(sectionName, sectionStruct) if err != nil { util.Log().Warning("配置文件 %s 分区解析失败: %s", sectionName, err) } } } // mapSection 将配置文件的 Section 映射到结构体上 func mapSection(section string, confStruct interface{}) error { err := cfg.Section(section).MapTo(confStruct) if err != nil { return err } // 验证合法性 validate := validator.New(&validator.Config{TagName: "validate"}) err = validate.Struct(confStruct) if err != nil { return err } return nil }