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)
|
||
}
|