48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package verify
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"schisandra-album-cloud-microservices/common/constant"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/redis/go-redis/v9"
|
|
"github.com/wenlng/go-captcha/v2/click"
|
|
)
|
|
|
|
// VerifyBasicTextCaptcha verify basic text captcha
|
|
func VerifyBasicTextCaptcha(dots string, key string, redis *redis.Client, ctx context.Context) bool {
|
|
cacheDataByte, err := redis.Get(ctx, constant.UserCaptchaPrefix+key).Bytes()
|
|
if len(cacheDataByte) == 0 || err != nil {
|
|
return false
|
|
}
|
|
src := strings.Split(dots, ",")
|
|
|
|
var dct map[int]*click.Dot
|
|
if err := json.Unmarshal(cacheDataByte, &dct); err != nil {
|
|
|
|
return false
|
|
}
|
|
chkRet := false
|
|
if (len(dct) * 2) == len(src) {
|
|
for i := 0; i < len(dct); i++ {
|
|
dot := dct[i]
|
|
j := i * 2
|
|
k := i*2 + 1
|
|
sx, _ := strconv.ParseFloat(fmt.Sprintf("%v", src[j]), 64)
|
|
sy, _ := strconv.ParseFloat(fmt.Sprintf("%v", src[k]), 64)
|
|
|
|
chkRet = click.CheckPoint(int64(sx), int64(sy), int64(dot.X), int64(dot.Y), int64(dot.Width), int64(dot.Height), 0)
|
|
if !chkRet {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
if chkRet {
|
|
return true
|
|
}
|
|
return false
|
|
}
|