You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.3 KiB
52 lines
1.3 KiB
package http |
|
|
|
import ( |
|
"crypto/md5" |
|
"encoding/hex" |
|
"strings" |
|
|
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
bm "go-common/library/net/http/blademaster" |
|
) |
|
|
|
const ( |
|
_sobotAppKey = "bcef69bb71499209" |
|
_sobotAppSecret = "ace486f144f1467eefdce1fe5dfc7b14" |
|
_sobotAPI = "https://sso-api.bilibili.co/x/internal/workflow/sobot/user" |
|
) |
|
|
|
func sobotSign(handler func(*bm.Context)) func(*bm.Context) { |
|
return func(c *bm.Context) { |
|
req := c.Request |
|
query := req.Form |
|
if query.Get("ts") == "" { |
|
log.Error("ts is empty") |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
sign := query.Get("sign") |
|
query.Del("sign") |
|
sappkey := query.Get("appkey") |
|
if sappkey != _sobotAppKey { |
|
log.Error("appkey not matched") |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
query.Set("appsecret", _sobotAppSecret) |
|
tmp := query.Encode() |
|
if strings.IndexByte(tmp, '+') > -1 { |
|
tmp = strings.Replace(tmp, "+", "%20", -1) |
|
} |
|
mh := md5.Sum([]byte(_sobotAPI + "?" + strings.ToLower(tmp) + _sobotAppSecret)) |
|
if hex.EncodeToString(mh[:]) != sign { |
|
mh1 := md5.Sum([]byte(_sobotAPI + "?" + tmp + _sobotAppSecret)) |
|
if hex.EncodeToString(mh1[:]) != sign { |
|
log.Error("Get sign: %s, expect %x", sign, mh1) |
|
c.JSON(nil, ecode.SignCheckErr) |
|
return |
|
} |
|
} |
|
handler(c) |
|
} |
|
}
|
|
|