1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package captcha
- import (
- "app.yhyue.com/moapp/jybase/go-xweb/httpsession"
- "app.yhyue.com/moapp/jybase/redis"
- "fmt"
- "log"
- "net/http"
- "strings"
- )
- type CheckCaptcha struct {
- W http.ResponseWriter
- R *http.Request
- Sess *httpsession.Session
- Phone string
- Point string
- Key string
- Mold int
- }
- // CheckCaptchaData .
- func (c *CheckCaptcha) CheckCaptchaData() (err error) {
- if strings.TrimSpace(c.Phone) == "" || !PhoneCheck(c.Phone) {
- err = fmt.Errorf("phone param is empty or incorrect")
- return
- }
- if c.Point == "" || c.Key == "" {
- err = fmt.Errorf("point or key param is empty")
- return
- }
- var (
- cacheDataByte *[]byte
- resCacheKey = fmt.Sprintf(ResCacheKey, c.Key, c.Phone)
- moldCacheKey = fmt.Sprintf(MoldCacheKey, c.Key, c.Phone)
- )
- cacheDataByte, err = redis.GetBytes(RedisCode, resCacheKey)
- if cacheDataByte == nil || len(*cacheDataByte) == 0 {
- log.Println("resCacheKey:", resCacheKey)
- err = fmt.Errorf("get cache value false key")
- return
- }
- if c.Mold == 0 {
- c.Mold = redis.GetInt(RedisCode, moldCacheKey)
- }
- if c.Mold == 0 {
- err = fmt.Errorf("check captcha time out")
- return
- }
- //每次缓存数据只用一次
- redis.Del(RedisCode, resCacheKey)
- redis.Del(RedisCode, moldCacheKey)
- switch c.Mold {
- case 1, 2:
- return c.CheckSlideCaptchaData(*cacheDataByte)
- case 3, 4:
- return c.CheckClickCaptchaData(*cacheDataByte)
- case 5:
- return c.CheckRotateCaptchaData(*cacheDataByte)
- }
- return
- }
|