64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package system
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"strconv"
|
|
"sun-panel/lib/captcha"
|
|
"sun-panel/lib/cmn"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type CaptchaApi struct {
|
|
ErrMsg string // 错误信息
|
|
}
|
|
|
|
// 获取图像
|
|
func (c *CaptchaApi) GetImage(ctx *gin.Context) {
|
|
key := cmn.BuildRandCode(16, cmn.RAND_CODE_MODE2)
|
|
width, _ := strconv.Atoi(ctx.Param("width"))
|
|
height, _ := strconv.Atoi(ctx.Param("height"))
|
|
if width == 0 || width > 500 {
|
|
width = 120
|
|
}
|
|
if height == 0 || height > 500 {
|
|
height = 44
|
|
}
|
|
// 设置网页验证码的cookie
|
|
ctx.SetCookie("CaptchaId", key, 3600, "/", "", false, false)
|
|
base64Str := captcha.GenerateCaptchaHandler(key, width, height)
|
|
_ = base64Str
|
|
// base64 字符串一般会包含头部 data:image/xxx;base64, 需要去除
|
|
baseImg, _ := base64.StdEncoding.DecodeString(base64Str[22:])
|
|
_, _ = ctx.Writer.WriteString(string(baseImg))
|
|
}
|
|
|
|
// 获取图像根据验证器id,id从地址栏获取
|
|
func (c *CaptchaApi) GetImageByCaptchaId(ctx *gin.Context) {
|
|
// key := cmn.BuildRandCode(16, cmn.RAND_CODE_MODE2)
|
|
width, _ := strconv.Atoi(ctx.Param("width"))
|
|
height, _ := strconv.Atoi(ctx.Param("height"))
|
|
captchaId := ctx.Param("captchaId")
|
|
if width == 0 || width > 500 {
|
|
width = 120
|
|
}
|
|
if height == 0 || height > 500 {
|
|
height = 44
|
|
}
|
|
// 设置网页验证码的cookie
|
|
base64Str := captcha.GenerateCaptchaHandler(captchaId, width, height)
|
|
_ = base64Str
|
|
// base64 字符串一般会包含头部 data:image/xxx;base64, 需要去除
|
|
baseImg, _ := base64.StdEncoding.DecodeString(base64Str[22:])
|
|
_, _ = ctx.Writer.WriteString(string(baseImg))
|
|
}
|
|
|
|
func (c *CaptchaApi) CheckVCode(id, vcode string) {
|
|
// Captcha.Store = base64Captcha.DefaultMemStore
|
|
// if store.Verify(id, vcode, true) {
|
|
// body = map[string]interface{}{"code": 1001, "msg": "ok"}
|
|
// }
|
|
// w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
|
// json.NewEncoder(w).Encode(body)
|
|
}
|