Skip to content

Commit 81f007e

Browse files
committed
fix(腾讯云): 修复A/B/D类签名查询参数重复编码的问题
1 parent 087c0e7 commit 81f007e

File tree

5 files changed

+48
-33
lines changed

5 files changed

+48
-33
lines changed

changcache_c.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,19 @@ func newChuangcacheC(token string) *chuangcacheC {
2727
}
2828
}
2929

30-
func (cc *chuangcacheC) sign(from *url.URL) (err error) {
30+
func (cc *chuangcacheC) sign(url *url.URL) (err error) {
3131
now := time.Now().Unix()
32-
key := fmt.Sprintf(cc.pattern, cc.token, from.Path, now)
33-
sb := gox.StringBuilder(from.RawQuery)
34-
if "" == from.RawQuery {
32+
key := fmt.Sprintf(cc.pattern, cc.token, url.Path, now)
33+
sign := cryptor.New(key).Md5().Hex()
34+
sb := gox.StringBuilder(url.RawQuery)
35+
if "" == url.RawQuery {
3536
sb.Append(question)
3637
} else {
3738
sb.Append(and)
3839
}
39-
sb.Append(cc.signature).Append(equal).Append(cryptor.New(key).Md5().Hex())
40+
sb.Append(cc.signature).Append(equal).Append(sign)
4041
sb.Append(and).Append(cc.timestamp).Append(equal).Append(now)
41-
from.RawQuery = sb.String()
42+
url.RawQuery = sb.String()
4243

4344
return
4445
}

tencent_a.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,37 @@ import (
66
"time"
77

88
"github.com/goexl/cryptor"
9+
"github.com/goexl/gox"
910
"github.com/rs/xid"
1011
)
1112

1213
var _ signer = (*tencentA)(nil)
1314

1415
type tencentA struct {
15-
pattern string
16-
key string
16+
pattern string
17+
key string
18+
signature string
1719
}
1820

1921
func newTencentA(key string) *tencentA {
2022
return &tencentA{
21-
pattern: "%s%d0%s%s",
22-
key: key,
23+
pattern: "%s%d0%s%s",
24+
key: key,
25+
signature: "sign",
2326
}
2427
}
2528

26-
func (a *tencentA) sign(url *url.URL) (err error) {
27-
nowHex := time.Now().Unix()
28-
key := fmt.Sprintf(a.pattern, url.EscapedPath(), nowHex, xid.New().String(), a.key)
29-
query := url.Query()
30-
query.Add("sign", cryptor.New(key).Md5().Hex())
31-
url.RawQuery = query.Encode()
29+
func (ta *tencentA) sign(url *url.URL) (err error) {
30+
now := time.Now().Unix()
31+
key := fmt.Sprintf(ta.pattern, url.EscapedPath(), now, xid.New().String(), ta.key)
32+
sb := gox.StringBuilder(url.RawQuery)
33+
if "" == url.RawQuery {
34+
sb.Append(question)
35+
} else {
36+
sb.Append(and)
37+
}
38+
sb.Append(ta.signature).Append(equal).Append(cryptor.New(key).Md5().Hex())
39+
url.RawQuery = sb.String()
3240

3341
return
3442
}

tencent_b.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ func newTencentB(key string) *tencentB {
2222
}
2323
}
2424

25-
func (b *tencentB) sign(url *url.URL) (err error) {
26-
nowHex := time.Now().Format("20060102150405")
27-
key := fmt.Sprintf(b.pattern, b.key, nowHex, url.EscapedPath())
25+
func (tb *tencentB) sign(url *url.URL) (err error) {
26+
now := time.Now().Format("20060102150405")
27+
key := fmt.Sprintf(tb.pattern, tb.key, now, url.EscapedPath())
2828
sign := cryptor.New(key).Md5().Hex()
29-
url.RawPath = fmt.Sprintf("%s/%s%s", nowHex, sign, url.EscapedPath())
30-
url.Path = fmt.Sprintf("%s/%s%s", nowHex, sign, url.Path)
29+
url.RawPath = fmt.Sprintf("%s/%s%s", now, sign, url.EscapedPath())
30+
url.Path = fmt.Sprintf("%s/%s%s", now, sign, url.Path)
3131

3232
return
3333
}

tencent_c.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ func newTencentC(key string) *tencentC {
2323
}
2424
}
2525

26-
func (c *tencentC) sign(url *url.URL) (err error) {
27-
nowHex := strconv.FormatInt(time.Now().Unix(), 16)
28-
key := fmt.Sprintf(c.pattern, c.key, url.EscapedPath(), nowHex)
26+
func (tc *tencentC) sign(url *url.URL) (err error) {
27+
now := strconv.FormatInt(time.Now().Unix(), 16)
28+
key := fmt.Sprintf(tc.pattern, tc.key, url.EscapedPath(), now)
2929
sign := cryptor.New(key).Md5().Hex()
30-
url.RawPath = fmt.Sprintf("/%s/%s%s", sign, nowHex, url.EscapedPath())
31-
url.Path = fmt.Sprintf("/%s/%s%s", sign, nowHex, url.Path)
30+
url.RawPath = fmt.Sprintf("/%s/%s%s", sign, now, url.EscapedPath())
31+
url.Path = fmt.Sprintf("/%s/%s%s", sign, now, url.Path)
3232

3333
return
3434
}

tencent_d.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"time"
88

99
"github.com/goexl/cryptor"
10+
"github.com/goexl/gox"
1011
)
1112

1213
var _ signer = (*tencentD)(nil)
@@ -27,14 +28,19 @@ func newTencentD(key string, signature string, timestamp string) *tencentD {
2728
}
2829
}
2930

30-
func (d *tencentD) sign(url *url.URL) (err error) {
31-
nowHex := strconv.FormatInt(time.Now().Unix(), 16)
32-
key := fmt.Sprintf(d.pattern, d.key, url.EscapedPath(), nowHex)
31+
func (td *tencentD) sign(url *url.URL) (err error) {
32+
now := strconv.FormatInt(time.Now().Unix(), 16)
33+
key := fmt.Sprintf(td.pattern, td.key, url.EscapedPath(), now)
3334
sign := cryptor.New(key).Md5().Hex()
34-
query := url.Query()
35-
query.Add(d.signature, sign)
36-
query.Add(d.timestamp, nowHex)
37-
url.RawQuery = query.Encode()
35+
sb := gox.StringBuilder(url.RawQuery)
36+
if "" == url.RawQuery {
37+
sb.Append(question)
38+
} else {
39+
sb.Append(and)
40+
}
41+
sb.Append(td.signature).Append(equal).Append(sign)
42+
sb.Append(and).Append(td.timestamp).Append(equal).Append(now)
43+
url.RawQuery = sb.String()
3844

3945
return
4046
}

0 commit comments

Comments
 (0)