增加图形验证码的功能
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"git.toowon.com/jimmy/go-common/captcha"
|
||||
"git.toowon.com/jimmy/go-common/config"
|
||||
"git.toowon.com/jimmy/go-common/email"
|
||||
"git.toowon.com/jimmy/go-common/excel"
|
||||
@@ -42,6 +43,7 @@ type Factory struct {
|
||||
i18n *i18n.I18n
|
||||
chain *middleware.Chain
|
||||
mcp mcp.Manager
|
||||
captcha captcha.Manager
|
||||
|
||||
mu sync.Mutex
|
||||
}
|
||||
@@ -437,6 +439,41 @@ func (f *Factory) MCP() (mcp.Manager, error) {
|
||||
return f.getMCP()
|
||||
}
|
||||
|
||||
func (f *Factory) getCaptcha() (captcha.Manager, error) {
|
||||
if f.captcha != nil {
|
||||
return f.captcha, nil
|
||||
}
|
||||
|
||||
var cfg *config.CaptchaConfig
|
||||
if f.cfg != nil {
|
||||
cfg = f.cfg.Captcha
|
||||
}
|
||||
|
||||
var rdb *redis.Client
|
||||
if cfg != nil && cfg.Enabled {
|
||||
var err error
|
||||
rdb, err = f.getRedis()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("captcha enabled but redis unavailable: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
f.mu.Lock()
|
||||
defer f.mu.Unlock()
|
||||
if f.captcha != nil {
|
||||
return f.captcha, nil
|
||||
}
|
||||
f.captcha = captcha.NewManager(rdb, cfg)
|
||||
return f.captcha, nil
|
||||
}
|
||||
|
||||
// Captcha 获取图形验证码子系统(Generate / Verify / 登录防暴力)。
|
||||
// config.captcha 未配置或 enabled=false 时返回 Enabled()=false 的安全实例。
|
||||
// enabled=true 时需配置 redis,否则返回 error。
|
||||
func (f *Factory) Captcha() (captcha.Manager, error) {
|
||||
return f.getCaptcha()
|
||||
}
|
||||
|
||||
// Migrator 创建迁移器并加载指定目录下的 SQL 文件
|
||||
func (f *Factory) Migrator(migrationsDir string) (*migration.Migrator, error) {
|
||||
db, err := f.getDatabase()
|
||||
|
||||
Reference in New Issue
Block a user