123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package captcha
- import (
- "app.yhyue.com/moapp/jybase/captcha/helper"
- "app.yhyue.com/moapp/jybase/redis"
- "encoding/json"
- "fmt"
- "github.com/wenlng/go-captcha-assets/resources/images"
- "github.com/wenlng/go-captcha/v2/base/option"
- "github.com/wenlng/go-captcha/v2/rotate"
- "image"
- "log"
- "strconv"
- )
- func RotateCaptcha() {
- builder := rotate.NewBuilder(rotate.WithRangeAnglePos([]option.RangeVal{
- {Min: 20, Max: 330},
- }))
- var (
- imgS []image.Image
- err error
- )
- // background images
- imgS, err = images.GetImages()
- if err != nil {
- log.Fatalln(err)
- }
- // set resources
- builder.SetResources(
- rotate.WithImages(imgS),
- )
- rotateFuncS = append(rotateFuncS, builder.Make())
- }
- // GetRotateCaptchaData .
- func (c *GetCaptcha) GetRotateCaptchaData() (cd CaptRes, err error) {
- if len(rotateFuncS) == 0 {
- err = fmt.Errorf("get rotateFuncS generate failed")
- return
- }
- var (
- captData rotate.CaptchaData
- )
- captData, err = rotateFuncS[0].Generate()
- if err != nil {
- log.Fatalln(err)
- return
- }
- blockData := captData.GetData()
- if blockData == nil {
- err = fmt.Errorf("gen captcha data failed")
- return
- }
- var masterImageBase64, thumbImageBase64 string
- masterImageBase64, err = captData.GetMasterImage().ToBase64()
- if err != nil {
- err = fmt.Errorf("masterImage base64 data failed")
- return
- }
- thumbImageBase64, err = captData.GetThumbImage().ToBase64()
- if err != nil {
- err = fmt.Errorf("tileImage base64 data failed")
- return
- }
- blockByte, _ := json.Marshal(blockData)
- captchaKey := helper.StringToMD5(string(blockByte))
- cacheKey := fmt.Sprintf(ResCacheKey, captchaKey, c.Phone)
- err = redis.PutBytes(RedisCode, cacheKey, &blockByte, redisTtl)
- if err != nil {
- err = fmt.Errorf("cache save value failed")
- return
- }
- fmt.Println("rotate >>>>>", string(blockByte))
- cd = CaptRes{
- Code: 6,
- CaptchaKey: captchaKey,
- ImageBase64: masterImageBase64,
- ThumbBase64: thumbImageBase64,
- ThumbSize: blockData.Width,
- }
- redis.Put(RedisCode, fmt.Sprintf(MoldCacheKey, captchaKey, c.Phone), cd.Code, SendCodeTtl)
- return
- }
- // CheckRotateCaptchaData .
- func (c *CheckCaptcha) CheckRotateCaptchaData(cacheDataByte []byte) (err error) {
- var dct *rotate.Block
- if err = json.Unmarshal(cacheDataByte, &dct); err != nil {
- return
- }
- sAngle, _ := strconv.ParseFloat(fmt.Sprintf("%v", c.Point), 64)
- chkRet := rotate.CheckAngle(int64(sAngle), int64(dct.Angle), 2)
- if !chkRet {
- err = fmt.Errorf("check result false")
- return
- }
- return
- }
|