| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839 |
- package model
- import (
- "crypto/md5"
- "encoding/base64"
- "encoding/hex"
- "encoding/json"
- "io"
- "net/http"
- "rocommon"
- "rocommon/rpc"
- "rocommon/service"
- "rocommon/util"
- "roserver/baseserver"
- "roserver/baseserver/model"
- "roserver/serverproto"
- "runtime/debug"
- "strconv"
- "strings"
- )
- var connInfoTimeOut int64 = 31 * 60
- func init() {
- serverproto.Handle_AUTH_CSLoginReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
- msg := ev.Msg().(*serverproto.CSLoginReq)
- util.InfoF("msg Platform:%s, token:%s, openID:%s", msg.Platform, msg.PlatformToken, msg.OpenId)
- if !checkOpenIdValid(msg.OpenId) {
- LoginRet(ev, int32(serverproto.ErrorCode_ERROR_FAIL))
- return
- }
- //todo...
- // 1,获取服务器状态,例如维护中不允许登陆
- if serverStatus := checkServerStatus(); serverStatus != int32(serverproto.ErrorCode_ERROR_OK) {
- LoginRet(ev, int32(serverproto.ErrorCode_ERROR_FAIL))
- return
- }
- sConfig := service.GetServiceConfig()
- whiteList := sConfig.SDKConfig.WhiteList
- isWhite := false
- if len(whiteList) > 0 {
- for _, white := range whiteList {
- if msg.OpenId == white {
- isWhite = true
- }
- }
- } else {
- isWhite = true
- }
- if !isWhite {
- LoginRet(ev, int32(serverproto.ErrorCode_ERROR_FAIL))
- return
- }
- util.InfoF("login %v", msg)
- //做sdk登陆验证处理
- if msg.Platform != model.SDKPlatform_PC && msg.Platform != "" {
- switch msg.Platform {
- case model.SDKPlatform_Quick:
- LoginVerifySign(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId)
- case model.SDKPlatform_Hw_Quick:
- LoginVerifyHwQuickSign(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId)
- case model.SDKPlatform_NBSDK:
- LoginVerifySignNBSDK(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId)
- case model.SDKPlatform_YouYi:
- fallthrough
- case model.SDKPlatform_YouYi_IOS:
- fallthrough
- case model.SDKPlatform_UniSDK:
- //对quick海外做适配
- LoginVerifyHwQuickSign(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId)
- // //LoginVerifySignUniSDK(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId, msg.Ip)
- // ret := serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED
- // if msg.Platform == model.SDKPlatform_YouYi || msg.Platform == model.SDKPlatform_YouYi_IOS {
- // ret, _ = LoginVerifySignYouYiSDKJWT(msg.Platform, msg.PlatformToken, msg.OpenId)
- // } else if msg.Platform == model.SDKPlatform_UniSDK {
- // ret, _ = LoginVerifySignUniSDKJWT(msg.Platform, msg.PlatformToken, msg.OpenId)
- // }
- // if ret == serverproto.ErrorCode_ERROR_OK {
- // //获取用户上次登录连接信息
- // var connInfo serverproto.UserConnectInfo
- // if !initUserConnInfo(&connInfo, msg.OpenId, msg.Platform) {
- // LoginRet(ev, int32(serverproto.ErrorCode_ERROR_FAIL))
- // return
- // }
- // loginNtf := &serverproto.SSLoginNtf{}
- // loginNtf.Error = int32(serverproto.ErrorCode_ERROR_OK)
- // loginNtf.ClientId = cliId.SessID
- // loginNtf.ConnInfo = &connInfo
- // //if loginNtf.ConnInfo.TimeStamp+connInfoTimeOut < util.GetTimeSeconds() {
- // // loginNtf.ConnInfo.LogicNode = ""
- // // util.InfoF("connect timeout openid=%v", msg.OpenId)
- // //}
- // ev.Session().Send(loginNtf)
- // } else {
- // LoginRet(ev, int32(serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED))
- // }
- case model.SDKPlatform_Dn_Ios:
- fallthrough
- case model.SDKPlatform_Dn_Android:
- //获取用户上次登录连接信息
- var connInfo serverproto.UserConnectInfo
- if !initUserConnInfo(&connInfo, msg.OpenId, "") {
- LoginRet(ev, int32(serverproto.ErrorCode_ERROR_FAIL))
- return
- }
- loginNtf := &serverproto.SSLoginNtf{}
- loginNtf.Error = int32(serverproto.ErrorCode_ERROR_OK)
- loginNtf.ClientId = cliId.SessID
- loginNtf.ConnInfo = &connInfo
- //if loginNtf.ConnInfo.TimeStamp+connInfoTimeOut < util.GetTimeSeconds() {
- // loginNtf.ConnInfo.LogicNode = ""
- // util.InfoF("connect timeout openid=%v", msg.OpenId)
- //}
- util.InfoF("loginNtf ClientId: %v,ConnInfo: %v", loginNtf.ClientId, *loginNtf.ConnInfo)
- ev.Session().Send(loginNtf)
- //LoginVerifyDNSign(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId, msg.CryptPass)
- case model.SDKPlatform_Xuan_Ios:
- LoginVerifyDNGoogleIosSign(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId, msg.CryptPass)
- case model.SDKPlatform_Xuan_Android:
- LoginVerifyDNSign(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId, msg.CryptPass)
- case model.SDKPlatform_Xuan_Google_Android:
- LoginVerifyDNGoogleAndroidSign(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId, msg.CryptPass)
- case model.SDKPlatform_Xuan_Google_Ios:
- LoginVerifyDNGoogleIosSign(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId, msg.CryptPass)
- case model.SDKPlatform_QI_Ios:
- fallthrough
- case model.SDKPlatform_QI_Android:
- LoginVerifyHwXiaoQiSign(cliId.SessID, cliId.ServiceID, msg.Platform, msg.PlatformToken, msg.OpenId)
- }
- return
- //util.InfoF("need sdk check")
- //LoginRet(ev, int32(serverproto.ErrorCode_ERROR_FAIL))
- //return
- } else if msg.Platform == model.SDKPlatform_PC {
- //获取用户上次登录连接信息
- var connInfo serverproto.UserConnectInfo
- if !initUserConnInfo(&connInfo, msg.OpenId, "") {
- LoginRet(ev, int32(serverproto.ErrorCode_ERROR_FAIL))
- return
- }
- loginNtf := &serverproto.SSLoginNtf{}
- loginNtf.Error = int32(serverproto.ErrorCode_ERROR_OK)
- loginNtf.ClientId = cliId.SessID
- loginNtf.ConnInfo = &connInfo
- //if loginNtf.ConnInfo.TimeStamp+connInfoTimeOut < util.GetTimeSeconds() {
- // loginNtf.ConnInfo.LogicNode = ""
- // util.InfoF("connect timeout openid=%v", msg.OpenId)
- //}
- util.InfoF("loginNtf ClientId: %v,ConnInfo: %v", loginNtf.ClientId, *loginNtf.ConnInfo)
- ev.Session().Send(loginNtf)
- } else {
- LoginRet(ev, int32(serverproto.ErrorCode_ERROR_ROLE_PLATFORM_EMPTY))
- }
- })
- serverproto.Handle_AUTH_SSSaveUserConnectInfo = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
- msg := ev.Msg().(*serverproto.SSSaveUserConnectInfo)
- saveUserConnInfo(msg.ConnInfo, msg.OpenId, msg.Platform, msg.SdkJson)
- })
- }
- func LoginVerifySign(clientId uint64, GateServiceNode string, platform string, token string, openId string) {
- authHttpAddr := ""
- urlPath := ""
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- tmpRequest := &rocommon.HTTPRequest{}
- tmpRequest.ReqCodecName = "httpform"
- if platform == model.SDKPlatform_Quick {
- authHttpAddr = service.GetServiceConfig().SDKConfig.QuickHttpAddr
- urlPath = service.GetServiceConfig().SDKConfig.QuickHttpAuth
- urlPath += "?token=" + token + "&product_code=" + service.GetServiceConfig().SDKConfig.QuickProductCode
- urlPath += "&uid=" + openId
- tmpRequest.ResMsg = &SDKQuickLoginAuthCheckResp{}
- }
- parm := GetHttpNodeParam()
- parm.LisAddr = authHttpAddr
- httpNode := baseserver.CreateHttpConnector(parm)
- err := httpNode.(rocommon.HTTPConnector).Request("GET", urlPath, tmpRequest)
- tmpResMsg := tmpRequest.ResMsg
- tmpResMsg.(*SDKQuickLoginAuthCheckResp).ClientId = clientId
- tmpResMsg.(*SDKQuickLoginAuthCheckResp).ServiceId = GateServiceNode
- tmpResMsg.(*SDKQuickLoginAuthCheckResp).OpenId = openId
- tmpResMsg.(*SDKQuickLoginAuthCheckResp).Platform = platform
- if err != nil {
- tmpRequest.ResMsg.(*SDKQuickLoginAuthCheckResp).RetCode = "0"
- util.InfoF("uid=%v http Request openid=%v err=%v", clientId, openId, err)
- }
- GetAuthCheckMag().AddCheckList(tmpRequest.ResMsg)
- }()
- }
- func DoLoginQuickVerifySign(res *SDKQuickLoginAuthCheckResp) {
- util.InfoF("openid=%v DoLoginQuickVerifySign retCode=%v", res.OpenId, res.RetCode)
- gateSession := model.GetServiceNode(res.ServiceId)
- if gateSession == nil {
- return
- }
- //1验证成功,其他数据验证失败
- if res.RetCode == "1" {
- //获取用户上次登录连接信息
- var connInfo serverproto.UserConnectInfo
- if !initUserConnInfo(&connInfo, res.OpenId, res.Platform) {
- LoginRetSDK(gateSession, res.ClientId, int32(serverproto.ErrorCode_ERROR_FAIL))
- return
- }
- loginNtf := &serverproto.SSLoginNtf{}
- loginNtf.Error = int32(serverproto.ErrorCode_ERROR_OK)
- loginNtf.ClientId = res.ClientId
- loginNtf.ConnInfo = &connInfo
- gateSession.Send(loginNtf)
- } else {
- LoginRetSDK(gateSession, res.ClientId, int32(serverproto.ErrorCode_ERROR_FAIL))
- }
- }
- func LoginVerifySignNBSDK(clientId uint64, GateServiceNode string, platform string, token string, openId string) {
- authHttpAddr := ""
- urlPath := ""
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- tmpRequest := &rocommon.HTTPRequest{}
- tmpRequest.ReqCodecName = "httpform"
- if platform == model.SDKPlatform_NBSDK {
- authHttpAddr = service.GetServiceConfig().SDKConfig.NbHttpAddr
- urlPath = service.GetServiceConfig().SDKConfig.NbHttpAuth
- urlPath += "?uid=" + openId + "&token=" + token
- tmpRequest.ResMsg = &SDKNBLoginAuthCheckResp{}
- }
- parm := GetHttpNodeParam()
- parm.LisAddr = authHttpAddr
- httpNode := baseserver.CreateHttpConnector(parm)
- err := httpNode.(rocommon.HTTPConnector).Request("GET", urlPath, tmpRequest)
- tmpResMsg := tmpRequest.ResMsg
- tmpResMsg.(*SDKNBLoginAuthCheckResp).ClientId = clientId
- tmpResMsg.(*SDKNBLoginAuthCheckResp).ServiceId = GateServiceNode
- tmpResMsg.(*SDKNBLoginAuthCheckResp).OpenId = openId
- tmpResMsg.(*SDKNBLoginAuthCheckResp).Platform = platform
- if err != nil {
- tmpRequest.ResMsg.(*SDKNBLoginAuthCheckResp).RetCode = "0"
- util.InfoF("uid=%v http Request openid=%v err=%v", clientId, openId, err)
- }
- GetAuthCheckMag().AddCheckList(tmpRequest.ResMsg)
- }()
- }
- func DoLoginNBSDKVerifySign(res *SDKNBLoginAuthCheckResp) {
- util.InfoF("openid=%v DoLoginNBSDKVerifySign retCode=%v", res.OpenId, res.RetCode)
- gateSession := model.GetServiceNode(res.ServiceId)
- if gateSession == nil {
- return
- }
- //1验证成功,其他数据验证失败
- if res.RetCode == "success" || !strings.Contains(res.RetCode, "fail") {
- //获取用户上次登录连接信息
- var connInfo serverproto.UserConnectInfo
- if !initUserConnInfo(&connInfo, res.OpenId, res.Platform) {
- LoginRetSDK(gateSession, res.ClientId, int32(serverproto.ErrorCode_ERROR_FAIL))
- return
- }
- loginNtf := &serverproto.SSLoginNtf{}
- loginNtf.Error = int32(serverproto.ErrorCode_ERROR_OK)
- loginNtf.ClientId = res.ClientId
- loginNtf.ConnInfo = &connInfo
- gateSession.Send(loginNtf)
- } else {
- LoginRetSDK(gateSession, res.ClientId, int32(serverproto.ErrorCode_ERROR_FAIL))
- }
- }
- var sdkUniSignAesKey = []byte("wenting123456789")
- func LoginVerifySignUniSDKJWT(platform, token, openId string) (serverproto.ErrorCode, string) {
- tokenList := strings.Split(token, ".") //userinfo.signinfo
- if len(tokenList) < 2 {
- return serverproto.ErrorCode_ERROR_FAIL, ""
- }
- if tokenList[0] == "" || tokenList[1] == "" {
- return serverproto.ErrorCode_ERROR_FAIL, ""
- }
- //签名匹配
- userInfoData, err := base64.StdEncoding.DecodeString(tokenList[0])
- if err != nil {
- util.InfoF("LoginVerifySignUniSDKJWT userInfoData decode failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- signInfoData, err := base64.StdEncoding.DecodeString(tokenList[1])
- if err != nil {
- util.InfoF("LoginVerifySignUniSDKJWT signInfoData decode failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- singInfo, err := rpc.AESCtrDecrypt(signInfoData, sdkUniSignAesKey, sdkUniSignAesKey...)
- if err != nil {
- util.InfoF("LoginVerifySignUniSDKJWT sign failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- if string(singInfo) != string(userInfoData) {
- util.InfoF("LoginVerifySignUniSDKJWT sign failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- //openid匹配
- checkUserInfo := &SDKCheckUserInfo{}
- err = json.Unmarshal(userInfoData, checkUserInfo)
- if err != nil {
- util.InfoF("LoginVerifySignUniSDKJWT sign failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- if checkUserInfo.Aid != openId {
- util.InfoF("LoginVerifySignUniSDKJWT openid not match openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- //过期时间处理(单位s)
- if checkUserInfo.ExpireTime < uint64(util.GetTimeSeconds()) {
- util.InfoF("LoginVerifySignUniSDKJWT expired openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_EXPIRE, ""
- }
- return serverproto.ErrorCode_ERROR_OK, checkUserInfo.AppChannel
- }
- func LoginVerifySignUniSDK(clientId uint64, GateServiceNode string, platform, token, openId, ip string) {
- authHttpAddr := ""
- urlPath := ""
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- tmpRequest := &rocommon.HTTPRequest{}
- tmpRequest.ReqCodecName = "httpjson"
- authHttpAddr = service.GetServiceConfig().SDKConfig.UniHttpAddr
- tmpKVList := map[string]interface{}{}
- err := json.Unmarshal([]byte(token), &tmpKVList)
- if err != nil {
- util.InfoF("uid=%v LoginVerifySignUniSDK openid=%v err=%v", clientId, openId, err)
- return
- }
- tmpKVList["hostid"] = service.GetServiceConfig().Node.Zone
- ipStrList := strings.Split(ip, ":")
- if len(ipStrList) > 0 {
- tmpKVList["ip"] = ipStrList[0]
- }
- tmpRequest.ReqMsg = tmpKVList
- tmpRequest.ResMsg = &SDKUniLoginAuthCheckResp{}
- parm := GetHttpNodeParam()
- parm.LisAddr = authHttpAddr
- httpNode := baseserver.CreateHttpConnector(parm)
- err = httpNode.(rocommon.HTTPConnector).Request("POST", urlPath, tmpRequest)
- tmpResMsg := tmpRequest.ResMsg
- tmpResMsg.(*SDKUniLoginAuthCheckResp).ClientId = clientId
- tmpResMsg.(*SDKUniLoginAuthCheckResp).ServiceId = GateServiceNode
- tmpResMsg.(*SDKUniLoginAuthCheckResp).OpenId = openId
- tmpResMsg.(*SDKUniLoginAuthCheckResp).Platform = platform
- if err != nil {
- tmpRequest.ResMsg.(*SDKUniLoginAuthCheckResp).RetCode = "0"
- util.InfoF("uid=%v http Request openid=%v err=%v", clientId, openId, err)
- }
- GetAuthCheckMag().AddCheckList(tmpRequest.ResMsg)
- }()
- }
- func DoLoginUniSDKVerifySign(res *SDKUniLoginAuthCheckResp) {
- util.InfoF("openid=%v DoLoginQuickVerifySign res=%v", res.OpenId, res)
- gateSession := model.GetServiceNode(res.ServiceId)
- if gateSession == nil {
- return
- }
- if res.Code == 200 && res.Status == "ok" {
- //获取用户上次登录连接信息
- var connInfo serverproto.UserConnectInfo
- if !initUserConnInfo(&connInfo, res.OpenId, res.Platform) {
- LoginRetSDK(gateSession, res.ClientId, int32(serverproto.ErrorCode_ERROR_FAIL))
- return
- }
- loginNtf := &serverproto.SSLoginNtf{}
- loginNtf.Error = int32(serverproto.ErrorCode_ERROR_OK)
- loginNtf.ClientId = res.ClientId
- loginNtf.ConnInfo = &connInfo
- loginNtf.SdkParam = res.UniSDKLoginJson
- gateSession.Send(loginNtf)
- } else {
- LoginRetSDK(gateSession, res.ClientId, int32(serverproto.ErrorCode_ERROR_FAIL))
- }
- }
- func LoginVerifySignYouYiSDKJWT(platform, token, openId string) (serverproto.ErrorCode, string) {
- tokenList := strings.Split(token, ".") //userinfo.signinfo
- if len(tokenList) < 2 {
- return serverproto.ErrorCode_ERROR_FAIL, ""
- }
- if tokenList[0] == "" || tokenList[1] == "" {
- return serverproto.ErrorCode_ERROR_FAIL, ""
- }
- //签名匹配
- userInfoData, err := base64.StdEncoding.DecodeString(tokenList[0])
- if err != nil {
- util.InfoF("LoginVerifySignUniSDKJWT userInfoData decode failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- signInfoData, err := base64.StdEncoding.DecodeString(tokenList[1])
- if err != nil {
- util.InfoF("LoginVerifySignUniSDKJWT signInfoData decode failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- singInfo, err := rpc.AESCtrDecrypt(signInfoData, sdkUniSignAesKey, sdkUniSignAesKey...)
- if err != nil {
- util.InfoF("LoginVerifySignUniSDKJWT sign failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- if string(singInfo) != string(userInfoData) {
- util.InfoF("LoginVerifySignUniSDKJWT sign failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- //openid匹配
- checkUserInfo := &SDKCheckUserInfo{}
- err = json.Unmarshal(userInfoData, checkUserInfo)
- if err != nil {
- util.InfoF("LoginVerifySignUniSDKJWT sign failed openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- if checkUserInfo.Aid != openId {
- util.InfoF("LoginVerifySignUniSDKJWT openid not match openId=%v err=%v", openId, err)
- return serverproto.ErrorCode_ERROR_SDK_LOGIN_FAILED, ""
- }
- ////过期时间处理(单位s)
- //if checkUserInfo.ExpireTime < uint64(util.GetTimeSeconds()) {
- // util.InfoF("LoginVerifySignUniSDKJWT expired openId=%v err=%v", openId, err)
- // return serverproto.ErrorCode_ERROR_SDK_LOGIN_EXPIRE, ""
- //}
- return serverproto.ErrorCode_ERROR_OK, checkUserInfo.AppChannel
- }
- // 海外quick
- func LoginVerifyHwQuickSign(clientId uint64, GateServiceNode string, platform string, token string, openId string) {
- authHttpAddr := ""
- urlPath := ""
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- tmpRequest := &rocommon.HTTPRequest{}
- tmpRequest.ReqCodecName = "httpjson"
- //为海外quick做适配
- // if platform == model.SDKPlatform_Hw_Quick {
- if true {
- authHttpAddr = "http://pxqg.hkhappygame.com"
- urlPath = "/webapi/checkUserInfo?token=" + token + "&uid=" + openId
- tmpRequest.ResMsg = &SDKHwQuickLoginAuthCheckResp{}
- util.InfoF("urlPath=%v", urlPath)
- }
- parm := GetHttpNodeParam()
- parm.LisAddr = authHttpAddr
- httpNode := baseserver.CreateHttpConnector(parm)
- err := httpNode.(rocommon.HTTPConnector).Request("GET", urlPath, tmpRequest)
- tmpResMsg := tmpRequest.ResMsg
- util.InfoF("tmpRequest.ResMsg:%v", tmpRequest.ResMsg)
- tmpResMsg.(*SDKHwQuickLoginAuthCheckResp).ClientId = clientId
- tmpResMsg.(*SDKHwQuickLoginAuthCheckResp).ServiceId = GateServiceNode
- tmpResMsg.(*SDKHwQuickLoginAuthCheckResp).OpenId = openId
- tmpResMsg.(*SDKHwQuickLoginAuthCheckResp).Platform = platform
- if err != nil {
- tmpRequest.ResMsg.(*SDKHwQuickLoginAuthCheckResp).Status = false
- util.InfoF("uid=%v http Request openid=%v err=%v", clientId, openId, err)
- }
- GetAuthCheckMag().AddCheckList(tmpRequest.ResMsg)
- }()
- }
- func getmd5(s string) string {
- hash := md5.Sum([]byte(s))
- return hex.EncodeToString(hash[:])
- }
- // 海外小七
- func LoginVerifyHwXiaoQiSign(clientId uint64, GateServiceNode string, platform string, token string, openId string) {
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- sign := getmd5("a8faf2c0acaaa5ef5d23860f219d7538" + token)
- //tmpRequest := &XiaoQILoginResp{}
- urlPath := "https://api.x7sy.com/user/check_v4_login?tokenkey=" + token + "&sign=" + sign
- util.InfoF("urlPath=%v", urlPath)
- resp, err := http.Get(urlPath)
- if err != nil {
- util.ErrorF("login sdk check error:%v", err)
- }
- defer resp.Body.Close() // 确保关闭响应体
- // 读取响应体
- body, _ := io.ReadAll(resp.Body)
- res := string(body)
- //err := httpNode.(rocommon.HTTPConnector).Request("GET", urlPath, tmpRequest)
- util.InfoF("tmpRequest.ResMsg:%v", res)
- tmpResMsg := &SDKHwQuickLoginAuthCheckResp{
- Status: true,
- }
- var resRu XiaoQILoginResp
- err = json.Unmarshal(body, &resRu)
- if err != nil {
- util.ErrorF("auth login json Unmarshal err:%v", err)
- }
- tmpResMsg.Message = strconv.Itoa(int(resRu.Errorno))
- tmpResMsg.ClientId = clientId
- tmpResMsg.ServiceId = GateServiceNode
- tmpResMsg.OpenId = resRu.Data.Guid
- tmpResMsg.Platform = platform
- g, _ := json.Marshal(resRu.Data)
- tmpResMsg.Guid = string(g)
- util.ErrorF("xiaoqi json Unmarshal data:%v,openid:%v", resRu.Data, tmpResMsg.OpenId)
- if err != nil || tmpResMsg.Message != "0" {
- tmpResMsg.Status = false
- util.ErrorF("uid=%v http Request openid=%v token=%v err=%v", clientId, resRu.Data.Guid, token, err)
- util.ErrorF("uid=%v http Request2 openid=%v err=%v", clientId, resRu.Data.Guid, resRu)
- }
- GetAuthCheckMag().AddCheckList(tmpResMsg)
- }()
- }
- type XiaoQILoginResp struct {
- Errorno int32 `json:"errorno"`
- Errormsg string `json:"errormsg"`
- Data Data `json:"data"`
- }
- type Data struct {
- Guid string `json:"guid"`
- Username string `json:"username"`
- IsRealUser string `json:"is_real_user"`
- IsEighteen string `json:"is_eighteen"`
- Si string `json:"si"`
- Pi string `json:"pi"`
- Di string `json:"di"`
- }
- func LoginVerifyGNQuickSign(clientId uint64, GateServiceNode string, platform string, token string, openId string) {
- //authHttpAddr := ""
- urlPath := ""
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- //tmpRequest := &rocommon.HTTPRequest{}
- //tmpRequest.ReqCodecName = "httpjson"
- //为海外quick做适配
- // if platform == model.SDKPlatform_Hw_Quick {
- if true {
- //authHttpAddr = ""
- //authHttpAddr = "http://pxqg.hkhappygame.com"
- urlPath = "http://checkuser.quickapi.net/v2/checkUserInfo?token=" + token + "&uid=" + openId
- //tmpRequest.ResMsg = ""
- util.InfoF("urlPath=%v", urlPath)
- }
- //parm := GetHttpNodeParam()
- //parm.LisAddr = authHttpAddr
- //httpNode := baseserver.CreateHttpConnector(parm)
- resp, err := http.Get(urlPath)
- if err != nil {
- util.ErrorF("login sdk check error:%v", err)
- }
- defer resp.Body.Close() // 确保关闭响应体
- // 读取响应体
- body, err2 := io.ReadAll(resp.Body)
- res := string(body)
- //err := httpNode.(rocommon.HTTPConnector).Request("GET", urlPath, tmpRequest)
- util.InfoF("tmpRequest.ResMsg:%v", res)
- tmpResMsg := &SDKHwQuickLoginAuthCheckResp{
- Status: true,
- }
- tmpResMsg.Message = res
- tmpResMsg.ClientId = clientId
- tmpResMsg.ServiceId = GateServiceNode
- tmpResMsg.OpenId = openId
- tmpResMsg.Platform = platform
- x, _ := strconv.Atoi(tmpResMsg.Message)
- if err2 != nil || x != 1 {
- tmpResMsg.Status = false
- util.InfoF("uid=%v http Request openid=%v err=%v", clientId, openId, err2)
- }
- GetAuthCheckMag().AddCheckList(tmpResMsg)
- }()
- }
- func LoginVerifyRUSign(clientId uint64, GateServiceNode string, platform string, token string, openId string) {
- //authHttpAddr := ""
- urlPath := ""
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- //tmpRequest := &rocommon.HTTPRequest{}
- //tmpRequest.ReqCodecName = "httpjson"
- //为海外quick做适配
- // if platform == model.SDKPlatform_Hw_Quick {
- gameserctKey := "80c648e7df8aaa72"
- param := "accountid=" + openId + "&gameid=100252" + "&sessionid=" + token
- hash := md5.Sum([]byte(param + gameserctKey))
- sign := hex.EncodeToString(hash[:])
- //authHttpAddr = ""
- //authHttpAddr = "http://pxqg.hkhappygame.com"
- urlPath = "http://sdk.szmsbdmy.com:8083/loginvalid.php?" + param + "&sign=" + sign
- //tmpRequest.ResMsg = ""
- util.InfoF("urlPath=%v", urlPath)
- //parm := GetHttpNodeParam()
- //parm.LisAddr = authHttpAddr
- //httpNode := baseserver.CreateHttpConnector(parm)
- resp, err := http.Get(urlPath)
- if err != nil {
- util.ErrorF("login sdk check error:%v", err)
- }
- defer resp.Body.Close() // 确保关闭响应体
- // 读取响应体
- body, err2 := io.ReadAll(resp.Body)
- res := string(body)
- //err := httpNode.(rocommon.HTTPConnector).Request("GET", urlPath, tmpRequest)
- util.InfoF("tmpRequest.ResMsg:%v", res)
- tmpResMsg := &SDKHwQuickLoginAuthCheckResp{
- Status: true,
- }
- var resRu ResponseRu
- err = json.Unmarshal(body, &resRu)
- if err != nil {
- util.ErrorF("auth login json Unmarshal err:%v", err)
- }
- tmpResMsg.Message = resRu.Code
- tmpResMsg.ClientId = clientId
- tmpResMsg.ServiceId = GateServiceNode
- tmpResMsg.OpenId = openId
- tmpResMsg.Platform = platform
- if err2 != nil || tmpResMsg.Message != "0" {
- tmpResMsg.Status = false
- util.ErrorF("uid=%v http Request openid=%v err=%v", clientId, openId, err2)
- util.ErrorF("uid=%v http Request2 openid=%v err=%v", clientId, openId, resRu.Msg)
- }
- GetAuthCheckMag().AddCheckList(tmpResMsg)
- }()
- }
- // 东南亚登录sdk
- func LoginVerifyDNSign(clientId uint64, GateServiceNode string, platform string, token string, openId string, time string) {
- //authHttpAddr := ""
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- key := "cee1b45a9aa02a75f9d720d6b9e7b7d4"
- //err := httpNode.(rocommon.HTTPConnector).Request("GET", urlPath, tmpRequest)
- //util.InfoF("tmpRequest.ResMsg:%v", res)
- tmpResMsg := &SDKHwQuickLoginAuthCheckResp{
- Status: true,
- }
- tmpResMsg.Message = "0"
- tmpResMsg.ClientId = clientId
- tmpResMsg.ServiceId = GateServiceNode
- tmpResMsg.OpenId = openId
- tmpResMsg.Platform = platform
- sign := md5.Sum([]byte(openId + time + key))
- newSign := hex.EncodeToString(sign[:])
- if newSign != token {
- tmpResMsg.Message = "1"
- }
- if tmpResMsg.Message != "0" {
- tmpResMsg.Status = false
- util.ErrorF("uid=%v http Request openid=%v sign:%v newSign:%v", clientId, openId, token, newSign)
- }
- GetAuthCheckMag().AddCheckList(tmpResMsg)
- }()
- }
- func LoginVerifyDNGoogleAndroidSign(clientId uint64, GateServiceNode string, platform string, token string, openId string, time string) {
- //authHttpAddr := ""
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- key := "e81c2bd2ffb7feb7f0df477dc02b0bbd"
- //err := httpNode.(rocommon.HTTPConnector).Request("GET", urlPath, tmpRequest)
- //util.InfoF("tmpRequest.ResMsg:%v", res)
- tmpResMsg := &SDKHwQuickLoginAuthCheckResp{
- Status: true,
- }
- tmpResMsg.Message = "0"
- tmpResMsg.ClientId = clientId
- tmpResMsg.ServiceId = GateServiceNode
- tmpResMsg.OpenId = openId
- tmpResMsg.Platform = platform
- sign := md5.Sum([]byte(openId + time + key))
- newSign := hex.EncodeToString(sign[:])
- if newSign != token {
- tmpResMsg.Message = "1"
- }
- if tmpResMsg.Message != "0" {
- tmpResMsg.Status = false
- util.ErrorF("uid=%v http Request openid=%v sign:%v newSign:%v", clientId, openId, token, newSign)
- }
- GetAuthCheckMag().AddCheckList(tmpResMsg)
- }()
- }
- func LoginVerifyDNGoogleIosSign(clientId uint64, GateServiceNode string, platform string, token string, openId string, time string) {
- //authHttpAddr := ""
- go func() {
- defer func() {
- //打印奔溃信息
- if err := recover(); err != nil {
- util.InfoF("onError data=%v \n%s\n", err, string(debug.Stack()))
- }
- }()
- key := "3f8e9fec0794443f76d3a27cd41e2711"
- //err := httpNode.(rocommon.HTTPConnector).Request("GET", urlPath, tmpRequest)
- //util.InfoF("tmpRequest.ResMsg:%v", res)
- tmpResMsg := &SDKHwQuickLoginAuthCheckResp{
- Status: true,
- }
- tmpResMsg.Message = "0"
- tmpResMsg.ClientId = clientId
- tmpResMsg.ServiceId = GateServiceNode
- tmpResMsg.OpenId = openId
- tmpResMsg.Platform = platform
- sign := md5.Sum([]byte(openId + time + key))
- newSign := hex.EncodeToString(sign[:])
- if newSign != token {
- tmpResMsg.Message = "1"
- }
- if tmpResMsg.Message != "0" {
- tmpResMsg.Status = false
- util.ErrorF("uid=%v http Request openid=%v sign:%v newSign:%v", clientId, openId, token, newSign)
- }
- GetAuthCheckMag().AddCheckList(tmpResMsg)
- }()
- }
- type ResponseRu struct {
- Code string `json:"code"`
- Msg string `json:"msg"`
- }
- // SDKUniLoginAuthCheckResp
- func DoLoginHwQuickVerifySign(res *SDKHwQuickLoginAuthCheckResp) {
- util.InfoF("openid=%v DoLoginHWQuickVerifySign retCode=%v", res.OpenId, res.RetCode)
- gateSession := model.GetServiceNode(res.ServiceId)
- if gateSession == nil {
- return
- }
- //1验证成功,其他数据验证失败
- if res.Status {
- util.InfoF("验证通过")
- //获取用户上次登录连接信息
- var connInfo serverproto.UserConnectInfo
- if !initUserConnInfo(&connInfo, res.OpenId, res.Platform) {
- LoginRetSDK(gateSession, res.ClientId, int32(serverproto.ErrorCode_ERROR_FAIL))
- return
- }
- //LoginRetSDK2(gateSession, res.ClientId, 8888, res.Guid)
- loginNtf := &serverproto.SSLoginNtf{}
- loginNtf.Error = int32(serverproto.ErrorCode_ERROR_OK)
- loginNtf.ClientId = res.ClientId
- loginNtf.ConnInfo = &connInfo
- //loginNtf.SdkParam = res.Guid
- gateSession.Send(loginNtf)
- } else {
- LoginRetSDK(gateSession, res.ClientId, int32(serverproto.ErrorCode_ERROR_FAIL))
- }
- }
|