57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package common
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
commonv1 "management/internal/erpserver/biz/v1/common"
|
|
"management/internal/pkg/config"
|
|
"management/internal/pkg/tpl"
|
|
)
|
|
|
|
type CaptchaHandler interface {
|
|
Captcha(w http.ResponseWriter, r *http.Request)
|
|
}
|
|
|
|
// captchaHandler 是 CaptchaHandler 接口的实现.
|
|
type captchaHandler struct {
|
|
conf *config.Captcha
|
|
render tpl.Renderer
|
|
biz commonv1.CaptchaBiz
|
|
}
|
|
|
|
// 确保 captchaHandler 实现了 CaptchaHandler 接口.
|
|
var _ CaptchaHandler = (*captchaHandler)(nil)
|
|
|
|
func NewCaptchaHandler(conf *config.Captcha, render tpl.Renderer, biz commonv1.CaptchaBiz) *captchaHandler {
|
|
return &captchaHandler{
|
|
conf: conf,
|
|
render: render,
|
|
biz: biz,
|
|
}
|
|
}
|
|
|
|
type CaptchaResponse struct {
|
|
CaptchaID string `json:"captcha_id"`
|
|
PicPath string `json:"pic_path"`
|
|
CaptchaLength int `json:"captcha_length"`
|
|
OpenCaptcha int `json:"open_captcha"`
|
|
}
|
|
|
|
func (h *captchaHandler) Captcha(w http.ResponseWriter, r *http.Request) {
|
|
keyLong := h.conf.KeyLong
|
|
oc := h.conf.OpenCaptcha
|
|
id, b64s, _, err := h.biz.Generate(h.conf.ImgHeight, h.conf.ImgWidth, keyLong, 0.7, 80)
|
|
if err != nil {
|
|
h.render.JSON(w, tpl.Response{Success: false, Message: "获取验证码失败"})
|
|
return
|
|
}
|
|
|
|
rsp := CaptchaResponse{
|
|
CaptchaID: id,
|
|
PicPath: b64s,
|
|
CaptchaLength: keyLong,
|
|
OpenCaptcha: oc,
|
|
}
|
|
h.render.JSON(w, tpl.Response{Success: true, Message: "ok", Data: rsp})
|
|
}
|