132 lines
3.5 KiB
Plaintext
132 lines
3.5 KiB
Plaintext
|
|
package gameServerMgr
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"encoding/json"
|
|||
|
|
"fmt"
|
|||
|
|
"strings"
|
|||
|
|
|
|||
|
|
. "Framework/managecenterModel"
|
|||
|
|
"goutil/logUtil"
|
|||
|
|
"goutil/securityUtil"
|
|||
|
|
"goutil/webUtil"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 登陆助手类
|
|||
|
|
type LoginUtil struct{}
|
|||
|
|
|
|||
|
|
// 验证登陆信息
|
|||
|
|
// partnerId:合作商Id
|
|||
|
|
// userId:合作商用户Id
|
|||
|
|
// loginInfo:登陆信息
|
|||
|
|
// isIntranet:是否是内网:true,内网;false:外网
|
|||
|
|
// 返回值:
|
|||
|
|
// 成功与否
|
|||
|
|
// 错误对象
|
|||
|
|
func (this *LoginUtil) CheckLoginInfo(partnerId int32, userId, loginInfo string, isIntranet bool) (success bool, err error) {
|
|||
|
|
// 验证用户合法性
|
|||
|
|
loginItemList := strings.Split(loginInfo, "_")
|
|||
|
|
if len(loginItemList) != 2 {
|
|||
|
|
err = fmt.Errorf("CheckLoginInfo Failed. partnerId:%d, userId:%s, loginInfo:%s", partnerId, userId, loginInfo)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//将requestUrl地址进行拆分
|
|||
|
|
requestDomainList := strings.Split(loginItemList[1], ";")
|
|||
|
|
|
|||
|
|
//请求的主域名
|
|||
|
|
requestDomain := ""
|
|||
|
|
if isIntranet || len(requestDomainList) == 1 {
|
|||
|
|
requestDomain = requestDomainList[0]
|
|||
|
|
} else {
|
|||
|
|
requestDomain = requestDomainList[1]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//构造请求url
|
|||
|
|
requestUrl := fmt.Sprintf("http://%s/API/CheckDynamicLoginKey.ashx", requestDomain)
|
|||
|
|
|
|||
|
|
// 定义请求参数
|
|||
|
|
postDict := make(map[string]string)
|
|||
|
|
postDict["UserId"] = userId
|
|||
|
|
postDict["LoginKey"] = loginItemList[0]
|
|||
|
|
|
|||
|
|
//请求url,请求头
|
|||
|
|
header := webUtil.GetFormHeader()
|
|||
|
|
transport := webUtil.NewTransport()
|
|||
|
|
transport.DisableKeepAlives = true
|
|||
|
|
transport = webUtil.GetTimeoutTransport(transport, 30)
|
|||
|
|
|
|||
|
|
statusCode, returnBytes, err1 := webUtil.PostMapData(requestUrl, postDict, header, transport)
|
|||
|
|
if err1 != nil {
|
|||
|
|
err = fmt.Errorf("CheckLoginInfo Failed. partnerId:%d, userId:%s, loginInfo:%s, err:%s", partnerId, userId, loginInfo, err1)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
if statusCode != 200 {
|
|||
|
|
err = fmt.Errorf("CheckLoginInfo Failed. partnerId:%d, userId:%s, loginInfo:%s, statusCode:%d", partnerId, userId, loginInfo, statusCode)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 解析返回值
|
|||
|
|
returnObj := new(ReturnObject)
|
|||
|
|
if err = json.Unmarshal(returnBytes, &returnObj); err != nil {
|
|||
|
|
err = fmt.Errorf("CheckLoginInfo Failed. partnerId:%d, userId:%s, loginInfo:%s, err:%s", partnerId, userId, loginInfo, err)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 判断返回状态是否为成功
|
|||
|
|
if returnObj.Code != 0 {
|
|||
|
|
logUtil.ErrorLog(fmt.Sprintf("CheckLoginInfo Failed. partnerId:%d, userId:%s, loginInfo:%s, Code:%d, Message:%s", partnerId, userId, loginInfo, returnObj.Code, returnObj.Message))
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
success = true
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 本地验证登陆信息
|
|||
|
|
// partnerId:合作商Id
|
|||
|
|
// userId:合作商用户Id
|
|||
|
|
// loginInfo:登陆信息
|
|||
|
|
// 返回值:
|
|||
|
|
// 成功与否
|
|||
|
|
// 错误对象
|
|||
|
|
func CheckDynamicTokenLocal(partnerId int32, userId, loginInfo string) (success bool, err error) {
|
|||
|
|
//1001直接返回true
|
|||
|
|
if partnerId == 1001 {
|
|||
|
|
return true, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//非1001渠道验证
|
|||
|
|
if len(loginInfo) == 0 {
|
|||
|
|
success = false
|
|||
|
|
err = fmt.Errorf("Err:%s", "LoginInfo is null!")
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
// 验证用户合法性
|
|||
|
|
loginItemList := strings.Split(loginInfo, "_")
|
|||
|
|
if len(loginItemList) != 2 {
|
|||
|
|
success = false
|
|||
|
|
err = fmt.Errorf("CheckLoginInfo Failed. userId:%s, loginInfo:%s", userId, loginInfo)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//生成key
|
|||
|
|
localSign := securityUtil.Md5String(userId+GetSysConfig().DynamicLoginKey+loginItemList[1], true)
|
|||
|
|
|
|||
|
|
//判断签名是佛正确
|
|||
|
|
if localSign != loginItemList[0] {
|
|||
|
|
success = false
|
|||
|
|
err = fmt.Errorf("CheckLoginInfo Failed. Sign Check Failed! userId:%s,LocalSign:%s,loginInfo:%s", userId, localSign, loginInfo)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
success = true
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ------------------类型定义和业务逻辑的分隔符-------------------------
|
|||
|
|
|
|||
|
|
var (
|
|||
|
|
LoginUtilObj = new(LoginUtil)
|
|||
|
|
)
|