Files
Go-Web-Template/server/service/system/register_config.go
2026-04-23 15:29:07 +08:00

85 lines
1.9 KiB
Go

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(&param).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()
}