package system import ( "strconv" "git.echol.cn/loser/Go-Web-Template/server/global" sysModel "git.echol.cn/loser/Go-Web-Template/server/model/system" ) const ( paramRegisterMode = "auth.register_mode" paramRegisterRequireCaptcha = "auth.register_require_captcha" paramInviteExpireHours = "auth.invite_code_expire_hours" ) type RegisterMode string const ( RegisterModeClosed RegisterMode = "closed" RegisterModeOpen RegisterMode = "open" RegisterModeInvite RegisterMode = "invite" ) var allowedInviteExpireHours = map[int]bool{ 12: true, 24: true, 72: true, 168: true, 720: true, } func getSysParamValue(key string) (string, bool) { var param sysModel.SysParams if err := global.GVA_DB.Where(sysModel.SysParams{Key: key}).First(¶m).Error; err != nil { return "", false } return param.Value, true } func GetRegisterMode() RegisterMode { if v, ok := getSysParamValue(paramRegisterMode); ok { switch RegisterMode(v) { case RegisterModeClosed, RegisterModeOpen, RegisterModeInvite: return RegisterMode(v) } } return RegisterModeClosed } func GetRegisterRequireCaptcha() bool { if v, ok := getSysParamValue(paramRegisterRequireCaptcha); ok { return v == "1" || v == "true" || v == "on" } return false } func GetInviteExpireHours() int { if v, ok := getSysParamValue(paramInviteExpireHours); ok { if n, err := strconv.Atoi(v); err == nil { if allowedInviteExpireHours[n] { return n } } } return 24 } // ---- 供 API 层调用的实例方法(避免跨包直接引用自由函数) ---- func (s *PublicRegisterService) RegisterMode() RegisterMode { return GetRegisterMode() } func (s *PublicRegisterService) RequireCaptcha() bool { return GetRegisterRequireCaptcha() } func (s *PublicRegisterService) InviteExpireHours() int { return GetInviteExpireHours() } func (s *InviteCodeService) InviteExpireHours() int { return GetInviteExpireHours() }