123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package realname
- import (
- "context"
- "crypto/md5"
- "encoding/hex"
- "fmt"
- "math/rand"
- "net/url"
- "strconv"
- "go-common/app/interface/main/account/conf"
- "go-common/app/interface/main/account/model"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- // CaptchaGTRegister register geetest
- func (s *Service) CaptchaGTRegister(c context.Context, mid int64, ip, gtType string) (urlstr string, remote int, err error) {
- var (
- p = url.Values{}
- challenge string
- )
- p.Set("ct", "1")
- p.Set("gt", conf.Conf.Realname.Geetest.CaptchaID)
- if challenge, err = s.realnameDao.RealnameCaptchaGTRegister(c, mid, ip, gtType, 1); err != nil || challenge == "" {
- p.Set("success", "0")
- remote = 0
- err = nil
- randOne := md5.Sum([]byte(strconv.Itoa(rand.Intn(100))))
- randTwo := md5.Sum([]byte(strconv.Itoa(rand.Intn(100))))
- p.Set("challenge", hex.EncodeToString(randOne[:])+hex.EncodeToString(randTwo[:])[0:2])
- } else {
- p.Set("success", "1")
- remote = 1
- array := md5.Sum([]byte(challenge + conf.Conf.Realname.Geetest.PrivateKey))
- p.Set("challenge", hex.EncodeToString(array[:]))
- }
- p.Set("hash", fmt.Sprintf("%x", md5.Sum([]byte(p.Encode()))))
- urlstr = "http://passport.bilibili.com/register/verification.html?" + p.Encode()
- return
- }
- // CaptchaGTRefresh refresh geetest
- func (s *Service) CaptchaGTRefresh(c context.Context, mid int64, ip, gtType string, hash string) (challenge string, gt string, success int, err error) {
- log.Info("CaptchaGTRefresh got hash : %s", hash)
- gt = conf.Conf.Realname.Geetest.CaptchaID
- if challenge, err = s.realnameDao.RealnameCaptchaGTRegister(c, mid, ip, gtType, 1); err != nil || challenge == "" {
- success = 0
- randOne := md5.Sum([]byte(strconv.Itoa(rand.Intn(100))))
- randTwo := md5.Sum([]byte(strconv.Itoa(rand.Intn(100))))
- challenge = hex.EncodeToString(randOne[:]) + hex.EncodeToString(randTwo[:])[0:2]
- } else {
- success = 1
- array := md5.Sum([]byte(challenge + conf.Conf.Realname.Geetest.PrivateKey))
- challenge = hex.EncodeToString(array[:])
- }
- return
- }
- // CaptchaGTValidate validate geetest
- func (s *Service) CaptchaGTValidate(c context.Context, mid int64, ip, clientType string, param *model.ParamRealnameCaptchaGTCheck) (res *model.RealnameCaptchaGTValidate, err error) {
- res = &model.RealnameCaptchaGTValidate{
- State: model.RealnameFalse,
- }
- switch param.Remote {
- // 极验远程校验
- case model.RealnameTrue:
- md5Array := md5.Sum([]byte(conf.Conf.Realname.Geetest.PrivateKey + "geetest" + param.Challenge))
- if hex.EncodeToString(md5Array[:]) != param.Validate {
- return
- }
- var remoteSeccode string
- if remoteSeccode, err = s.realnameDao.RealnameCaptchaGTRegisterValidate(c, param.Challenge, param.Seccode, clientType, ip, conf.Conf.Realname.Geetest.CaptchaID, mid); err != nil {
- return
- }
- log.Info("CaptchaGTValidate remoteSec : %s", remoteSeccode)
- md5Array = md5.Sum([]byte(remoteSeccode))
- res.State = model.RealnameTrue
- // if hex.EncodeToString(md5Array[:]) == param.Seccode {
- // res.State = model.RealnameTrue
- // }
- // 极验本地校验
- case model.RealnameFalse:
- // md5Array := md5.Sum([]byte(param.Challenge))
- // if hex.EncodeToString(md5Array[:]) == param.Validate {
- // res.State = model.RealnameTrue
- // }
- res.State = model.RealnameTrue
- default:
- err = ecode.RequestErr
- }
- s.addmiss(func() {
- if missErr := s.setAlipayAntispamPassFlag(context.Background(), mid, true); missErr != nil {
- log.Error("%+v", err)
- }
- })
- return
- }
|