Commit 8b9ba965295fc094d0bd34ac04a16a96a93ee658

Authored by 王家文
1 parent b0cb5864
Exists in master and in 1 other branch dev-wjw

refactor♻️:项目目录重构

controllers/base.go
1 1 package controllers
2 2  
3 3 import (
  4 + "apigame/middleware/sign"
4 5 "apigame/service/constd"
5   - "apigame/sign"
6 6 "encoding/json"
7 7 "github.com/astaxie/beego"
8 8 )
... ...
middleware/sdk/sdk.go 0 → 100644
... ... @@ -0,0 +1,155 @@
  1 +package sdk
  2 +
  3 +import (
  4 + "apigame/util/util-lx/lxalilog"
  5 + "apigame/util/util-lx/lxbeego"
  6 + "apigame/util/util-lx/lxredis"
  7 + "encoding/json"
  8 + "errors"
  9 + "fmt"
  10 + "strings"
  11 +
  12 + "github.com/astaxie/beego"
  13 +)
  14 +
  15 +type MapSdkTokenRet struct {
  16 + Code string `json:"code"`
  17 + Data struct {
  18 + Ttl int `json:"ttl"`
  19 + } `json:"data"`
  20 + Msg string `json:"msg"`
  21 +}
  22 +
  23 +type MapSDKMemberInfo struct {
  24 + Code string `json:"code"`
  25 + Data struct {
  26 + Uid int64 `json:"uid"`
  27 + Channel string `json:"channel"`
  28 + Scene string `json:"scene"`
  29 + Openid string `json:"openid"`
  30 + Unionid string `json:"unionid"`
  31 + Nickname string `json:"nickname"`
  32 + Headurl string `json:"headurl"`
  33 + Sex int `json:"sex"`
  34 + Shareuid int64 `json:"shareuid"`
  35 + Status int `json:"status"`
  36 + FirstLogin string `json:"first_login"`
  37 + Logindays int `json:"logindays"`
  38 + CreateTime int64 `json:"create_time"`
  39 + LastloginTime int64 `json:"lastlogin_time"`
  40 + UpdateTime int64 `json:"update_time"`
  41 + } `json:"data"`
  42 + Msg string `json:"msg"`
  43 +}
  44 +
  45 +func ckecklocaldb(gameid string, uid int64, token string) (err error) {
  46 +
  47 + _redis := lxredis.LXredis{
  48 + Name: fmt.Sprintf("token::%s::%d", gameid, uid),
  49 + Db: beego.AppConfig.String("redis::sdkdb"),
  50 + Prefix: beego.AppConfig.String("redis::sdkprefix"),
  51 + }
  52 +
  53 + tstr, err := _redis.GET()
  54 + if err != nil {
  55 + lxalilog.Errors(err, "_redis GET:")
  56 + return
  57 + }
  58 +
  59 + if tstr == "" {
  60 + err = errors.New("tsrt")
  61 + lxalilog.Errors(err, "tstr empty:")
  62 + return
  63 + }
  64 +
  65 + redistoken := strings.Split(tstr, "|")[0]
  66 + if redistoken != token {
  67 + err = errors.New("token error")
  68 + lxalilog.Errors(err, "redistoken:", redistoken, ",token:", token)
  69 + return
  70 + }
  71 +
  72 + return
  73 +}
  74 +
  75 +// 验证SDKtoken
  76 +func CheckSdkToken(gameid string, uid int64, token string) (err error) {
  77 +
  78 + if uid == 99 || token == "fb0ba80fad895664c7aea7c8ce462505" {
  79 + return
  80 + }
  81 +
  82 + return ckecklocaldb(gameid, uid, token)
  83 +
  84 + // var (
  85 + // gconfig = service_config.GetGameConfigByGameID(gameid)
  86 + // apiurl = beego.AppConfig.String("sdk::checktoken") + gconfig.Appkey
  87 + // )
  88 +
  89 + // content, httpcode, err := lurl.PostBody(apiurl, map[string]interface{}{
  90 + // "gameid": gameid,
  91 + // "uid": uid,
  92 + // "token": token,
  93 + // })
  94 +
  95 + // if err != nil {
  96 + // lxalilog.Errors("lurl.PostBody error:", err, gameid, uid, token)
  97 + // return
  98 + // }
  99 +
  100 + // if httpcode != 200 {
  101 + // err = errors.New("httpcode!= 200")
  102 + // lxalilog.Errors("httpcode error:", err, gameid, uid, token, httpcode)
  103 + // return
  104 + // }
  105 +
  106 + // var ret MapSdkTokenRet
  107 + // err = json.Unmarshal(content, &ret)
  108 + // if err != nil {
  109 + // lxalilog.Errors("json.Unmarshal error:", err, gameid, uid, token, string(content))
  110 + // return
  111 + // }
  112 +
  113 + // if ret.Code != "0" {
  114 + // err = errors.New("ret.Code != 0")
  115 + // lxalilog.Errors(err, gameid, uid, token, string(content))
  116 + // return
  117 + // }
  118 +
  119 + // return
  120 +}
  121 +
  122 +// 获取SDK用户信息
  123 +func GetSdkMemberInfo(gameid string, uid int64) (member MapSDKMemberInfo, err error) {
  124 +
  125 + var (
  126 + apiurl = fmt.Sprintf("%s?gameid=%s&uid=%d", beego.AppConfig.String("sdk::getmemberinfo"), gameid, uid)
  127 + )
  128 +
  129 + content, httpcode, err := lxbeego.Get(apiurl)
  130 +
  131 + if err != nil {
  132 + lxalilog.Errors("lxbeego.lxbeego error:", err, apiurl)
  133 + return
  134 + }
  135 +
  136 + if httpcode != 200 {
  137 + err = errors.New("httpcode!= 200")
  138 + lxalilog.Errors("httpcode error:", err, apiurl)
  139 + return
  140 + }
  141 +
  142 + err = json.Unmarshal(content, &member)
  143 + if err != nil {
  144 + lxalilog.Errors("json.Unmarshal error:", err, apiurl, string(content))
  145 + return
  146 + }
  147 +
  148 + if member.Code != "0" {
  149 + err = errors.New("ret.Code != 0")
  150 + lxalilog.Errors(err, apiurl, string(content))
  151 + return
  152 + }
  153 +
  154 + return
  155 +}
... ...
middleware/sign/index.go 0 → 100644
... ... @@ -0,0 +1,309 @@
  1 +package sign
  2 +
  3 +import (
  4 + "apigame/api-common/config"
  5 + "apigame/middleware/sdk"
  6 + "apigame/service/constd"
  7 + "apigame/util/util-lx/lxalilog"
  8 + "apigame/util/util-lx/lxarray"
  9 + "apigame/util/util-lx/lxconv"
  10 + "apigame/util/util-lx/lxlimit"
  11 + "apigame/util/util-lx/lxtime"
  12 + "encoding/json"
  13 + "errors"
  14 + "fmt"
  15 +
  16 + "sort"
  17 + "strings"
  18 + "unicode/utf8"
  19 +
  20 + "github.com/astaxie/beego/validation"
  21 +)
  22 +
  23 +type MCheckConfig struct {
  24 + CheckUrlGameID bool
  25 + CheckToken bool
  26 + CheckSign bool
  27 + FunName string
  28 + Bodys []byte
  29 + Ip lxlimit.MFuncItem `json:"ip"`
  30 + Kernel lxlimit.MFuncItem `json:"kernel"`
  31 + Member lxlimit.MFuncItem `json:"member"`
  32 + Url string `json:"url"`
  33 + Params map[string]string `json:"params"`
  34 +}
  35 +
  36 +func getTimeStamp(time_stamp interface{}) (timestamp int64) {
  37 + if time_stamp == nil {
  38 + return
  39 + }
  40 +
  41 + tsp := ""
  42 +
  43 + switch tp := time_stamp.(type) {
  44 + case string:
  45 + tsp = fmt.Sprintf("%s", tp)
  46 + }
  47 +
  48 + if tsp == "" {
  49 + return
  50 + }
  51 +
  52 + timestamp = lxconv.ParseInt64(tsp)
  53 + lth := utf8.RuneCountInString(tsp)
  54 + if lth > 10 {
  55 + timestamp = timestamp / 1000
  56 + }
  57 +
  58 + return
  59 +
  60 +}
  61 +
  62 +func InitCheck(postdata interface{}, cgg MCheckConfig) (code string, gameconfig config.MApiGameConfig, err error) {
  63 +
  64 + var (
  65 + postGameId string
  66 + urlGameId string
  67 + ty string
  68 + c lxlimit.MFuncConfig
  69 + nowtime = lxtime.NowUninx()
  70 + time_stamp int64
  71 + JG = int64(2)
  72 + )
  73 +
  74 + // 检查时间戳
  75 + tempData := make(map[string]interface{})
  76 + _ = json.Unmarshal(cgg.Bodys, &tempData)
  77 +
  78 + time_stamp = getTimeStamp(tempData["time_stamp"])
  79 + if time_stamp < (nowtime-JG) || time_stamp > (nowtime+JG) {
  80 + code = constd.RECODE_REQUESTTIME_ERROR
  81 + err = errors.New(code)
  82 + lxalilog.Errors("RECODE_REQUESTTIME_ERROR error:", string(cgg.Bodys))
  83 + return
  84 + }
  85 +
  86 + c.Ip = cgg.Ip
  87 + c.Kernel = cgg.Kernel
  88 + c.Params = cgg.Params
  89 + c.Url = cgg.Url
  90 + c.BodyBy = cgg.Bodys
  91 + if cgg.FunName == "" {
  92 + c.FunName = c.Url
  93 + }
  94 + c.Member = cgg.Member
  95 +
  96 + for k, v := range c.Params {
  97 + if k == ":gameid" {
  98 + urlGameId = v
  99 + }
  100 + }
  101 +
  102 + if cgg.CheckUrlGameID && urlGameId == "" {
  103 + code = constd.RECODE_PARAMERROR
  104 + err = errors.New(code)
  105 + lxalilog.Errors("urlGameid error:")
  106 + return
  107 + }
  108 +
  109 + postGameId, ty = lxlimit.CheckLimit(c)
  110 +
  111 + if cgg.CheckUrlGameID && postGameId != urlGameId {
  112 + code = constd.RECODE_PARAMERROR
  113 + err = errors.New(code)
  114 + lxalilog.Errors("urlGameid !=postGameId:", urlGameId, postdata)
  115 + return
  116 + }
  117 +
  118 + if ty != "" {
  119 + code = constd.RECODE_REQUESTXIANLIU_ERROR
  120 + err = errors.New(ty)
  121 + return
  122 + }
  123 +
  124 + err = json.Unmarshal(cgg.Bodys, &postdata)
  125 + if err != nil {
  126 + code = constd.RECODE_PARAMERROR
  127 + lxalilog.Errors("json.Unmarshal error:", err, string(cgg.Bodys))
  128 + return
  129 + }
  130 +
  131 + valid := validation.Validation{}
  132 +
  133 + var b bool
  134 +
  135 + b, err = valid.Valid(postdata)
  136 + if err != nil {
  137 + code = constd.RECODE_PARAMERROR
  138 + lxalilog.Errors("valid.Valid error:", err, string(cgg.Bodys), valid.Errors)
  139 + return
  140 + }
  141 +
  142 + if !b {
  143 + code = constd.RECODE_PARAMERROR
  144 + err = errors.New(code)
  145 + lxalilog.Errors("valid.Valid error:", err, string(cgg.Bodys), valid.Errors)
  146 + return
  147 + }
  148 +
  149 + if cgg.CheckSign {
  150 + code, gameconfig, err = CheckSign(postdata, cgg.CheckToken)
  151 + if err != nil {
  152 + return
  153 + }
  154 + }
  155 +
  156 + return
  157 +}
  158 +
  159 +// Check 检查签名
  160 +func Check(req []byte, postdata interface{}, checkSign bool, checkToken bool) (code string, err error) {
  161 +
  162 + err = json.Unmarshal(req, &postdata)
  163 + if err != nil {
  164 + code = constd.RECODE_PARAMERROR
  165 + lxalilog.Errors("json.Unmarshal error:", err, string(req))
  166 + return
  167 + }
  168 +
  169 + valid := validation.Validation{}
  170 +
  171 + var b bool
  172 +
  173 + b, err = valid.Valid(postdata)
  174 + if err != nil {
  175 + code = constd.RECODE_PARAMERROR
  176 + lxalilog.Errors("valid.Valid error:", err, string(req), valid.Errors)
  177 + return
  178 + }
  179 +
  180 + if !b {
  181 + code = constd.RECODE_PARAMERROR
  182 + err = errors.New(code)
  183 + lxalilog.Errors("valid.Valid error:", err, string(req), valid.Errors)
  184 + return
  185 + }
  186 +
  187 + if checkSign {
  188 + code, _, err = CheckSign(postdata, checkToken)
  189 + if err != nil {
  190 + return
  191 + }
  192 + }
  193 +
  194 + return
  195 +}
  196 +
  197 +// CheckSign 校验签名
  198 +func CheckSign(data interface{}, checkToken bool) (code string, gameconfig config.MApiGameConfig, err error) {
  199 +
  200 + var (
  201 + logstr string
  202 + )
  203 +
  204 + jsonBody, _ := json.Marshal(data)
  205 +
  206 + logstr += string(jsonBody)
  207 +
  208 + var newdata = make(map[string]interface{})
  209 +
  210 + err = json.Unmarshal(jsonBody, &newdata)
  211 + if err != nil {
  212 + code = constd.RECODE_SIGNERROR
  213 + lxalilog.Errors("json.Unmarshal error:", err)
  214 + return
  215 + }
  216 +
  217 + if newdata["gameid"] == "" || newdata["channel"] == "" || newdata["sign"] == "" || newdata["sign_type"] == "" || newdata["time_stamp"] == "" || newdata["ver"] == "" {
  218 + code = constd.RECODE_SIGNERROR
  219 + err = errors.New("签名错误,参数错误" + logstr)
  220 + lxalilog.Errors(err)
  221 + return
  222 + }
  223 +
  224 + gameid := newdata["gameid"].(string)
  225 +
  226 + gameconfig, err = config.GetApiGameConfig(gameid)
  227 + if err != nil {
  228 + lxalilog.Errors(err)
  229 + return
  230 + }
  231 +
  232 + if newdata["sign"].(string) == "fb0ba80fad895664c7aea7c8ce462505" {
  233 + return
  234 + }
  235 +
  236 + appkey := gameconfig.Appkey
  237 +
  238 + if appkey == "" {
  239 + code = constd.RECODE_SIGNERROR
  240 + err = errors.New("签名错误,参数错误" + gameid + "no appkey")
  241 + lxalilog.Errors(err)
  242 + return
  243 + }
  244 +
  245 + sign := newdata["sign"]
  246 +
  247 + sortdata := make([]string, 0, len(newdata))
  248 +
  249 + fiterword := "and|exec|insert|select|delete|update|count|master|truncate|declare|char(|mid(|chr(|'"
  250 + fiterwords := strings.Split(fiterword, "|")
  251 + var fiterkey []interface{}
  252 +
  253 + for k, v := range newdata {
  254 + newv := lxconv.InterfaceToStr(v)
  255 +
  256 + if b := lxarray.InArray(newv, fiterwords); b {
  257 + fiterkey = append(fiterkey, k)
  258 + }
  259 + if newv != "" && newv != "0" && k != "sign" && k != "ver" && k != "dev" && k != "dever" && k != "pkv" {
  260 + sortdata = append(sortdata, k)
  261 + }
  262 + }
  263 +
  264 + if len(fiterkey) > 0 {
  265 + code = constd.RECODE_WEIXINAZIFU_ERROR
  266 + err = errors.New("fiterkey error" + logstr)
  267 + lxalilog.Errors(err, lxconv.JsonEncode(fiterkey), "data:", lxconv.JsonEncode(newdata))
  268 + return
  269 + }
  270 +
  271 + sort.Strings(sortdata)
  272 + valstr := ""
  273 + for _, k := range sortdata { // 先下标,再数值
  274 + v := lxconv.InterfaceToStr(newdata[k])
  275 + valstr += k + "=" + v
  276 + }
  277 +
  278 + valstr += appkey
  279 +
  280 + logstr += ",valstr:(" + valstr + ")"
  281 +
  282 + md5key := strings.ToLower(lxconv.EncryMD5(valstr))
  283 +
  284 + if md5key != sign {
  285 + code = constd.RECODE_SIGNERROR
  286 + err = errors.New(code)
  287 + lxalilog.Errors("sign error,md5key::", md5key, ",sign:", sign, logstr, "data:", lxconv.JsonEncode(newdata))
  288 + return
  289 + }
  290 +
  291 + if checkToken {
  292 +
  293 + if newdata["uid"] == nil || newdata["token"] == nil {
  294 + code = constd.RECODE_PARAMERROR
  295 + err = errors.New(code)
  296 + lxalilog.Errors("no uid or token", "data:", lxconv.JsonEncode(newdata))
  297 + return
  298 + }
  299 +
  300 + err = sdk.CheckSdkToken(gameid, lxconv.ToInt64(newdata["uid"]), lxconv.InterfaceToStr(newdata["token"]))
  301 + if err != nil {
  302 + code = constd.RECODE_LOGINCHECK_ERROR
  303 + return
  304 + }
  305 +
  306 + }
  307 +
  308 + return
  309 +}
... ...
sdk/sdk.go
... ... @@ -1,155 +0,0 @@
1   -package sdk
2   -
3   -import (
4   - "apigame/util/util-lx/lxalilog"
5   - "apigame/util/util-lx/lxbeego"
6   - "apigame/util/util-lx/lxredis"
7   - "encoding/json"
8   - "errors"
9   - "fmt"
10   - "strings"
11   -
12   - "github.com/astaxie/beego"
13   -)
14   -
15   -type MapSdkTokenRet struct {
16   - Code string `json:"code"`
17   - Data struct {
18   - Ttl int `json:"ttl"`
19   - } `json:"data"`
20   - Msg string `json:"msg"`
21   -}
22   -
23   -type MapSDKMemberInfo struct {
24   - Code string `json:"code"`
25   - Data struct {
26   - Uid int64 `json:"uid"`
27   - Channel string `json:"channel"`
28   - Scene string `json:"scene"`
29   - Openid string `json:"openid"`
30   - Unionid string `json:"unionid"`
31   - Nickname string `json:"nickname"`
32   - Headurl string `json:"headurl"`
33   - Sex int `json:"sex"`
34   - Shareuid int64 `json:"shareuid"`
35   - Status int `json:"status"`
36   - FirstLogin string `json:"first_login"`
37   - Logindays int `json:"logindays"`
38   - CreateTime int64 `json:"create_time"`
39   - LastloginTime int64 `json:"lastlogin_time"`
40   - UpdateTime int64 `json:"update_time"`
41   - } `json:"data"`
42   - Msg string `json:"msg"`
43   -}
44   -
45   -func ckecklocaldb(gameid string, uid int64, token string) (err error) {
46   -
47   - _redis := lxredis.LXredis{
48   - Name: fmt.Sprintf("token::%s::%d", gameid, uid),
49   - Db: beego.AppConfig.String("redis::sdkdb"),
50   - Prefix: beego.AppConfig.String("redis::sdkprefix"),
51   - }
52   -
53   - tstr, err := _redis.GET()
54   - if err != nil {
55   - lxalilog.Errors(err, "_redis GET:")
56   - return
57   - }
58   -
59   - if tstr == "" {
60   - err = errors.New("tsrt")
61   - lxalilog.Errors(err, "tstr empty:")
62   - return
63   - }
64   -
65   - redistoken := strings.Split(tstr, "|")[0]
66   - if redistoken != token {
67   - err = errors.New("token error")
68   - lxalilog.Errors(err, "redistoken:", redistoken, ",token:", token)
69   - return
70   - }
71   -
72   - return
73   -}
74   -
75   -// 验证SDKtoken
76   -func CheckSdkToken(gameid string, uid int64, token string) (err error) {
77   -
78   - if uid == 99 || token == "fb0ba80fad895664c7aea7c8ce462505" {
79   - return
80   - }
81   -
82   - return ckecklocaldb(gameid, uid, token)
83   -
84   - // var (
85   - // gconfig = service_config.GetGameConfigByGameID(gameid)
86   - // apiurl = beego.AppConfig.String("sdk::checktoken") + gconfig.Appkey
87   - // )
88   -
89   - // content, httpcode, err := lurl.PostBody(apiurl, map[string]interface{}{
90   - // "gameid": gameid,
91   - // "uid": uid,
92   - // "token": token,
93   - // })
94   -
95   - // if err != nil {
96   - // lxalilog.Errors("lurl.PostBody error:", err, gameid, uid, token)
97   - // return
98   - // }
99   -
100   - // if httpcode != 200 {
101   - // err = errors.New("httpcode!= 200")
102   - // lxalilog.Errors("httpcode error:", err, gameid, uid, token, httpcode)
103   - // return
104   - // }
105   -
106   - // var ret MapSdkTokenRet
107   - // err = json.Unmarshal(content, &ret)
108   - // if err != nil {
109   - // lxalilog.Errors("json.Unmarshal error:", err, gameid, uid, token, string(content))
110   - // return
111   - // }
112   -
113   - // if ret.Code != "0" {
114   - // err = errors.New("ret.Code != 0")
115   - // lxalilog.Errors(err, gameid, uid, token, string(content))
116   - // return
117   - // }
118   -
119   - // return
120   -}
121   -
122   -// 获取SDK用户信息
123   -func GetSdkMemberInfo(gameid string, uid int64) (member MapSDKMemberInfo, err error) {
124   -
125   - var (
126   - apiurl = fmt.Sprintf("%s?gameid=%s&uid=%d", beego.AppConfig.String("sdk::getmemberinfo"), gameid, uid)
127   - )
128   -
129   - content, httpcode, err := lxbeego.Get(apiurl)
130   -
131   - if err != nil {
132   - lxalilog.Errors("lxbeego.lxbeego error:", err, apiurl)
133   - return
134   - }
135   -
136   - if httpcode != 200 {
137   - err = errors.New("httpcode!= 200")
138   - lxalilog.Errors("httpcode error:", err, apiurl)
139   - return
140   - }
141   -
142   - err = json.Unmarshal(content, &member)
143   - if err != nil {
144   - lxalilog.Errors("json.Unmarshal error:", err, apiurl, string(content))
145   - return
146   - }
147   -
148   - if member.Code != "0" {
149   - err = errors.New("ret.Code != 0")
150   - lxalilog.Errors(err, apiurl, string(content))
151   - return
152   - }
153   -
154   - return
155   -}
sign/index.go
... ... @@ -1,309 +0,0 @@
1   -package sign
2   -
3   -import (
4   - "apigame/api-common/config"
5   - "apigame/sdk"
6   - "apigame/service/constd"
7   - "apigame/util/util-lx/lxalilog"
8   - "apigame/util/util-lx/lxarray"
9   - "apigame/util/util-lx/lxconv"
10   - "apigame/util/util-lx/lxlimit"
11   - "apigame/util/util-lx/lxtime"
12   - "encoding/json"
13   - "errors"
14   - "fmt"
15   -
16   - "sort"
17   - "strings"
18   - "unicode/utf8"
19   -
20   - "github.com/astaxie/beego/validation"
21   -)
22   -
23   -type MCheckConfig struct {
24   - CheckUrlGameID bool
25   - CheckToken bool
26   - CheckSign bool
27   - FunName string
28   - Bodys []byte
29   - Ip lxlimit.MFuncItem `json:"ip"`
30   - Kernel lxlimit.MFuncItem `json:"kernel"`
31   - Member lxlimit.MFuncItem `json:"member"`
32   - Url string `json:"url"`
33   - Params map[string]string `json:"params"`
34   -}
35   -
36   -func getTimeStamp(time_stamp interface{}) (timestamp int64) {
37   - if time_stamp == nil {
38   - return
39   - }
40   -
41   - tsp := ""
42   -
43   - switch tp := time_stamp.(type) {
44   - case string:
45   - tsp = fmt.Sprintf("%s", tp)
46   - }
47   -
48   - if tsp == "" {
49   - return
50   - }
51   -
52   - timestamp = lxconv.ParseInt64(tsp)
53   - lth := utf8.RuneCountInString(tsp)
54   - if lth > 10 {
55   - timestamp = timestamp / 1000
56   - }
57   -
58   - return
59   -
60   -}
61   -
62   -func InitCheck(postdata interface{}, cgg MCheckConfig) (code string, gameconfig config.MApiGameConfig, err error) {
63   -
64   - var (
65   - postGameId string
66   - urlGameId string
67   - ty string
68   - c lxlimit.MFuncConfig
69   - nowtime = lxtime.NowUninx()
70   - time_stamp int64
71   - JG = int64(2)
72   - )
73   -
74   - // 检查时间戳
75   - tempData := make(map[string]interface{})
76   - _ = json.Unmarshal(cgg.Bodys, &tempData)
77   -
78   - time_stamp = getTimeStamp(tempData["time_stamp"])
79   - if time_stamp < (nowtime-JG) || time_stamp > (nowtime+JG) {
80   - code = constd.RECODE_REQUESTTIME_ERROR
81   - err = errors.New(code)
82   - lxalilog.Errors("RECODE_REQUESTTIME_ERROR error:", string(cgg.Bodys))
83   - return
84   - }
85   -
86   - c.Ip = cgg.Ip
87   - c.Kernel = cgg.Kernel
88   - c.Params = cgg.Params
89   - c.Url = cgg.Url
90   - c.BodyBy = cgg.Bodys
91   - if cgg.FunName == "" {
92   - c.FunName = c.Url
93   - }
94   - c.Member = cgg.Member
95   -
96   - for k, v := range c.Params {
97   - if k == ":gameid" {
98   - urlGameId = v
99   - }
100   - }
101   -
102   - if cgg.CheckUrlGameID && urlGameId == "" {
103   - code = constd.RECODE_PARAMERROR
104   - err = errors.New(code)
105   - lxalilog.Errors("urlGameid error:")
106   - return
107   - }
108   -
109   - postGameId, ty = lxlimit.CheckLimit(c)
110   -
111   - if cgg.CheckUrlGameID && postGameId != urlGameId {
112   - code = constd.RECODE_PARAMERROR
113   - err = errors.New(code)
114   - lxalilog.Errors("urlGameid !=postGameId:", urlGameId, postdata)
115   - return
116   - }
117   -
118   - if ty != "" {
119   - code = constd.RECODE_REQUESTXIANLIU_ERROR
120   - err = errors.New(ty)
121   - return
122   - }
123   -
124   - err = json.Unmarshal(cgg.Bodys, &postdata)
125   - if err != nil {
126   - code = constd.RECODE_PARAMERROR
127   - lxalilog.Errors("json.Unmarshal error:", err, string(cgg.Bodys))
128   - return
129   - }
130   -
131   - valid := validation.Validation{}
132   -
133   - var b bool
134   -
135   - b, err = valid.Valid(postdata)
136   - if err != nil {
137   - code = constd.RECODE_PARAMERROR
138   - lxalilog.Errors("valid.Valid error:", err, string(cgg.Bodys), valid.Errors)
139   - return
140   - }
141   -
142   - if !b {
143   - code = constd.RECODE_PARAMERROR
144   - err = errors.New(code)
145   - lxalilog.Errors("valid.Valid error:", err, string(cgg.Bodys), valid.Errors)
146   - return
147   - }
148   -
149   - if cgg.CheckSign {
150   - code, gameconfig, err = CheckSign(postdata, cgg.CheckToken)
151   - if err != nil {
152   - return
153   - }
154   - }
155   -
156   - return
157   -}
158   -
159   -// Check 检查签名
160   -func Check(req []byte, postdata interface{}, checkSign bool, checkToken bool) (code string, err error) {
161   -
162   - err = json.Unmarshal(req, &postdata)
163   - if err != nil {
164   - code = constd.RECODE_PARAMERROR
165   - lxalilog.Errors("json.Unmarshal error:", err, string(req))
166   - return
167   - }
168   -
169   - valid := validation.Validation{}
170   -
171   - var b bool
172   -
173   - b, err = valid.Valid(postdata)
174   - if err != nil {
175   - code = constd.RECODE_PARAMERROR
176   - lxalilog.Errors("valid.Valid error:", err, string(req), valid.Errors)
177   - return
178   - }
179   -
180   - if !b {
181   - code = constd.RECODE_PARAMERROR
182   - err = errors.New(code)
183   - lxalilog.Errors("valid.Valid error:", err, string(req), valid.Errors)
184   - return
185   - }
186   -
187   - if checkSign {
188   - code, _, err = CheckSign(postdata, checkToken)
189   - if err != nil {
190   - return
191   - }
192   - }
193   -
194   - return
195   -}
196   -
197   -// CheckSign 校验签名
198   -func CheckSign(data interface{}, checkToken bool) (code string, gameconfig config.MApiGameConfig, err error) {
199   -
200   - var (
201   - logstr string
202   - )
203   -
204   - jsonBody, _ := json.Marshal(data)
205   -
206   - logstr += string(jsonBody)
207   -
208   - var newdata = make(map[string]interface{})
209   -
210   - err = json.Unmarshal(jsonBody, &newdata)
211   - if err != nil {
212   - code = constd.RECODE_SIGNERROR
213   - lxalilog.Errors("json.Unmarshal error:", err)
214   - return
215   - }
216   -
217   - if newdata["gameid"] == "" || newdata["channel"] == "" || newdata["sign"] == "" || newdata["sign_type"] == "" || newdata["time_stamp"] == "" || newdata["ver"] == "" {
218   - code = constd.RECODE_SIGNERROR
219   - err = errors.New("签名错误,参数错误" + logstr)
220   - lxalilog.Errors(err)
221   - return
222   - }
223   -
224   - gameid := newdata["gameid"].(string)
225   -
226   - gameconfig, err = config.GetApiGameConfig(gameid)
227   - if err != nil {
228   - lxalilog.Errors(err)
229   - return
230   - }
231   -
232   - if newdata["sign"].(string) == "fb0ba80fad895664c7aea7c8ce462505" {
233   - return
234   - }
235   -
236   - appkey := gameconfig.Appkey
237   -
238   - if appkey == "" {
239   - code = constd.RECODE_SIGNERROR
240   - err = errors.New("签名错误,参数错误" + gameid + "no appkey")
241   - lxalilog.Errors(err)
242   - return
243   - }
244   -
245   - sign := newdata["sign"]
246   -
247   - sortdata := make([]string, 0, len(newdata))
248   -
249   - fiterword := "and|exec|insert|select|delete|update|count|master|truncate|declare|char(|mid(|chr(|'"
250   - fiterwords := strings.Split(fiterword, "|")
251   - var fiterkey []interface{}
252   -
253   - for k, v := range newdata {
254   - newv := lxconv.InterfaceToStr(v)
255   -
256   - if b := lxarray.InArray(newv, fiterwords); b {
257   - fiterkey = append(fiterkey, k)
258   - }
259   - if newv != "" && newv != "0" && k != "sign" && k != "ver" && k != "dev" && k != "dever" && k != "pkv" {
260   - sortdata = append(sortdata, k)
261   - }
262   - }
263   -
264   - if len(fiterkey) > 0 {
265   - code = constd.RECODE_WEIXINAZIFU_ERROR
266   - err = errors.New("fiterkey error" + logstr)
267   - lxalilog.Errors(err, lxconv.JsonEncode(fiterkey), "data:", lxconv.JsonEncode(newdata))
268   - return
269   - }
270   -
271   - sort.Strings(sortdata)
272   - valstr := ""
273   - for _, k := range sortdata { // 先下标,再数值
274   - v := lxconv.InterfaceToStr(newdata[k])
275   - valstr += k + "=" + v
276   - }
277   -
278   - valstr += appkey
279   -
280   - logstr += ",valstr:(" + valstr + ")"
281   -
282   - md5key := strings.ToLower(lxconv.EncryMD5(valstr))
283   -
284   - if md5key != sign {
285   - code = constd.RECODE_SIGNERROR
286   - err = errors.New(code)
287   - lxalilog.Errors("sign error,md5key::", md5key, ",sign:", sign, logstr, "data:", lxconv.JsonEncode(newdata))
288   - return
289   - }
290   -
291   - if checkToken {
292   -
293   - if newdata["uid"] == nil || newdata["token"] == nil {
294   - code = constd.RECODE_PARAMERROR
295   - err = errors.New(code)
296   - lxalilog.Errors("no uid or token", "data:", lxconv.JsonEncode(newdata))
297   - return
298   - }
299   -
300   - err = sdk.CheckSdkToken(gameid, lxconv.ToInt64(newdata["uid"]), lxconv.InterfaceToStr(newdata["token"]))
301   - if err != nil {
302   - code = constd.RECODE_LOGINCHECK_ERROR
303   - return
304   - }
305   -
306   - }
307   -
308   - return
309   -}