package app import ( "fmt" "github.com/go-redis/redis/v8" "github.com/liangdas/mqant/log" iptool "github.com/liangdas/mqant/utils/ip" "github.com/olivere/elastic/v7" "gorm.io/gorm" "net" "server/call" "server/common" "server/db" "server/modules/web/values" "server/util" "strings" "time" ) // VerifyCode 验证短信验证码 func (g *Gin) VerifyCode(reqContent, reqCode string) bool { code, err := db.Redis().GetString(common.GetRedisKeyCode(reqContent)) if err != nil && err != redis.Nil { log.Error("err:%v", err) g.Code = values.CodeRetry return false } if code != reqCode { g.Code = values.CodeCodeError g.Msg = "Code is wrong." return false } return true } // GetRemoteIP 获取玩家真实IP func (g *Gin) GetRemoteIP() string { ip := g.Context.GetHeader("X-Real-IP") if ip != "" { if !iptool.IsInnerIp(ip) { return ip } } ip = iptool.RealIP(g.Context.Request) if strings.Contains(ip, ":") { ip, _, _ = net.SplitHostPort(ip) } return ip } func (g *Gin) QueryUser(req values.CommonLogin) (user *common.PlayerDBInfo, isNew bool) { u := &common.PlayerDBInfo{ChannelID: g.Channel} if len(req.Phone) > 0 { u.Mobile = req.Phone } else { u.Openid = &req.OpenID } if err := db.Mysql().Get(u); err != nil && err != gorm.ErrRecordNotFound { g.Code = values.CodeRetry log.Error("err:%v", err) return } if req.DeviceID == "" { req.DeviceID = req.OpenID } // if req.Gpsadid == "" { // req.Gpsadid = req.DeviceID // } user = u if user.Id <= 0 { user.Nick = req.Nick user.Avatar = req.Avatar user.AccountType = req.AccountType user.ChannelID = g.Channel user.DeviceId = req.DeviceID user.ADID = req.Adid user.GPSADID = req.Gpsadid user.Openid = &req.OpenID user.AccountName = req.AccountName user.Pass = req.Pass if len(req.Phone) > 0 { user.Mobile = req.Phone } ip := g.GetRemoteIP() if err := call.NewUser(user, ip, req.Share, req.Fbc, req.Fbp, req.UserAgent); err != nil { g.Code = values.CodeRetry if err.Error() == "ip" { g.Code = values.CodeAccountIPLimit g.Msg = "ip limit" } return } isNew = true if len(req.DeviceID) > 0 { uuid := req.DeviceID // 处理一下新增安装 util.Go(func() { q := elastic.NewBoolQuery() q.Filter(elastic.NewTermsQuery("UUID.keyword", uuid)) q.Filter(elastic.NewTermQuery("Channel", g.Channel)) if db.ES().Count(common.ESIndexBackOpenRecord, q) > 0 { return } id := fmt.Sprintf("%v_%v", g.Channel, uuid) db.ES().InsertToESByIDGO(common.ESIndexBackOpenRecord, id, &common.ESOpenRecord{Time: time.Now().Unix(), UUID: uuid, Channel: g.Channel}) }) } } else { user.ADID = req.Adid user.GPSADID = req.Gpsadid } return }