新增 4 项可配置站点设置(DB持久化+内存缓存,即时生效): - site.brand 品牌名(页面标题/页脚/管理面板,默认 MetaLab) - site.framework 框架名(页脚标识,默认 MetaZone) - site.copyright_start 版权起始年(页脚,默认 2024) - registration.enabled 注册开关(关闭后禁止新用户注册,默认 true) 实现方式: - InjectSiteInfo 中间件:全局注入 Brand/Framework/CopyrightStart 到 gin.Context - BuildPageData 读取 context,所有 SSR 页面自动获取站点信息 - AuthService.Register 最先检查 IsRegistrationEnabled() - 管理后台新增「基本设置」+「注册设置」区块,文本输入手动保存 + Toggle 即时生效
39 lines
2.0 KiB
Go
39 lines
2.0 KiB
Go
package common
|
||
|
||
import "errors"
|
||
|
||
// 认证相关错误哨兵(统一存放,避免 service 和 middleware 交叉引用)
|
||
var (
|
||
ErrEmailExists = errors.New("该邮箱已注册")
|
||
ErrUsernameTaken = errors.New("该用户名已被占用")
|
||
ErrUsernameInvalid = errors.New("用户名格式无效(支持中英文、数字、下划线、连字符,1-16个字符)")
|
||
ErrBioTooLong = errors.New("个性签名不能超过 128 个字符")
|
||
ErrInvalidCred = errors.New("邮箱或密码错误")
|
||
ErrUserNotFound = errors.New("用户不存在")
|
||
ErrUserBanned = errors.New("该账号已被封禁")
|
||
ErrUserDeleted = errors.New("该账号已申请注销,登录即自动恢复")
|
||
// 统一返回,避免泄露用户存在性、软删除状态等内部信息
|
||
ErrUserLocked = errors.New("邮箱或密码错误")
|
||
ErrWeakPassword = errors.New("密码需至少 8 位,且包含字母和数字")
|
||
ErrTokenExpired = errors.New("登录已过期,请重新登录")
|
||
ErrTokenInvalid = errors.New("无效的认证凭据")
|
||
ErrTokenRevoked = errors.New("登录凭证已失效,请重新登录")
|
||
ErrRateLimitAccount = errors.New("该账号登录尝试过于频繁")
|
||
ErrRateLimitIP = errors.New("请求过于频繁,请稍后重试")
|
||
ErrRateLimitRegisterIP = errors.New("注册请求过于频繁,请稍后重试")
|
||
ErrPermissionDenied = errors.New("权限不足")
|
||
|
||
// 审核相关
|
||
ErrAuditNotFound = errors.New("审核记录不存在")
|
||
ErrAuditNotPending = errors.New("该审核记录已处理")
|
||
ErrAuditDisabled = errors.New("审核功能未开启")
|
||
ErrAuditTypeOff = errors.New("该类型审核未开启")
|
||
|
||
// 密码 & 注销相关
|
||
ErrIncorrectPassword = errors.New("当前密码错误")
|
||
ErrLoginBeforeDelete = errors.New("请先登录再注销")
|
||
ErrNeedsConfirmRestore = errors.New("需要二次确认恢复账号")
|
||
ErrOwnerCannotDelete = errors.New("站长不可自主注销,请先转让站长权限")
|
||
ErrRegistrationDisabled = errors.New("注册功能已关闭")
|
||
)
|