support captcha

This commit is contained in:
yanghao05
2023-02-04 16:24:08 +08:00
parent 384677f071
commit 1c2b861ac7
13 changed files with 138 additions and 57 deletions

View File

@@ -0,0 +1,55 @@
package captcha
import (
"atom/container"
"atom/providers/config"
"errors"
"log"
"github.com/mojocn/base64Captcha"
)
func init() {
if err := container.Container.Provide(NewCaptcha); err != nil {
log.Fatal(err)
}
}
type CaptchaResponse struct {
CaptchaId string `json:"captcha_id,omitempty"`
PicPath string `json:"pic_path,omitempty"`
CaptchaLength uint `json:"captcha_length,omitempty"`
OpenCaptcha uint `json:"open_captcha,omitempty"`
}
type Captcha struct {
conf *config.Config
captcha *base64Captcha.Captcha
}
func NewCaptcha(conf *config.Config, driver base64Captcha.Driver) (*Captcha, error) {
var store = base64Captcha.DefaultMemStore
return &Captcha{
conf: conf,
captcha: base64Captcha.NewCaptcha(driver, store),
}, nil
}
func (c *Captcha) Generate() (*CaptchaResponse, error) {
id, b64s, err := c.captcha.Generate()
if err != nil {
return nil, errors.New("验证码获取失败")
}
return &CaptchaResponse{
CaptchaId: id,
PicPath: b64s,
CaptchaLength: c.conf.Captcha.KeyLong,
OpenCaptcha: c.conf.Captcha.OpenCaptcha,
}, nil
}
func (c *Captcha) Verify(id, answer string) bool {
return c.captcha.Verify(id, answer, false)
}

View File

@@ -0,0 +1,26 @@
package storage
import (
"atom/container"
"atom/providers/config"
"log"
"github.com/mojocn/base64Captcha"
)
func init() {
if err := container.Container.Provide(NewCaptchaDriverDigit); err != nil {
log.Fatal(err)
}
}
func NewCaptchaDriverDigit(conf *config.Config) (base64Captcha.Driver, error) {
// 字符,公式,验证码配置
// 生成默认数字的driver
return base64Captcha.NewDriverDigit(
int(conf.Captcha.ImgHeight),
int(conf.Captcha.ImgWidth),
int(conf.Captcha.KeyLong),
0.7,
80), nil
}