57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package common
 | |
| 
 | |
| import (
 | |
| 	"net/http"
 | |
| 
 | |
| 	"management/internal/config"
 | |
| 	commonv1 "management/internal/erpserver/biz/v1/common"
 | |
| 	"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})
 | |
| }
 |