Skip to content

Commit e3113e1

Browse files
committed
@request-target should include params, fixes #1.
1 parent 1671f83 commit e3113e1

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

http2_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ var wantFields = `"kuku": my awesome header
1818
"@query": ?k1=v1&k2
1919
"@method": GET
2020
"@target-uri": {{.Scheme}}://127.0.0.1:{{.Port}}/path?k1=v1&k2
21+
"@request-target": /path?k1=v1&k2
2122
"@authority": 127.0.0.1:{{.Port}}
2223
"@scheme": {{.Scheme}}
2324
"@target-uri": {{.Scheme}}://127.0.0.1:{{.Port}}/path?k1=v1&k2
2425
"@path": /path
2526
"@query": ?k1=v1&k2
2627
"@query-param";name="k1": v1
2728
"@query-param";name="k2":
28-
"@signature-params": ("kuku" "@query" "@method" "@target-uri" "@authority" "@scheme" "@target-uri" "@path" "@query" "@query-param";name="k1" "@query-param";name="k2");alg="hmac-sha256";keyid="key1"`
29+
"@signature-params": ("kuku" "@query" "@method" "@target-uri" "@request-target" "@authority" "@scheme" "@target-uri" "@path" "@query" "@query-param";name="k1" "@query-param";name="k2");alg="hmac-sha256";keyid="key1"`
2930

3031
func execTemplate(t template.Template, name string, data interface{}) (string, error) {
3132
buf := &bytes.Buffer{}
@@ -116,7 +117,7 @@ func simpleClient(t *testing.T, proto string, simpleHandler func(w http.Response
116117

117118
signer, err := NewHMACSHA256Signer("key1", bytes.Repeat([]byte{0x03}, 64),
118119
NewSignConfig().SignCreated(false),
119-
*NewFields().AddHeaders("kuku", "@query", "@method", "@target-uri", "@authority", "@scheme", "@target-uri",
120+
*NewFields().AddHeaders("kuku", "@query", "@method", "@target-uri", "@request-target", "@authority", "@scheme", "@target-uri",
120121
"@path", "@query").AddQueryParam("k1").AddQueryParam("k2"))
121122
if err != nil {
122123
t.Errorf("failed to create signer")

httpparse.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,11 @@ func scQuery(url *url.URL) string {
104104
}
105105

106106
func scRequestTarget(url *url.URL) string {
107-
return url.Path
107+
if url.RawQuery == "" {
108+
return url.Path
109+
} else {
110+
return url.Path + "?" + url.RawQuery
111+
}
108112
}
109113

110114
func scScheme(url *url.URL) string {

signatures_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,6 +1367,14 @@ Example-Dict: a=1, b=2;x=1;y=2, c=(a b c)
13671367
13681368
`
13691369

1370+
var httpreq5 = `GET /foo HTTP/1.1
1371+
Host: www.example.com
1372+
Date: Tue, 20 Apr 2021 02:07:56 GMT
1373+
Cache-Control: max-age=60
1374+
Cache-Control: must-revalidate
1375+
1376+
`
1377+
13701378
func Test_signRequestDebug(t *testing.T) {
13711379
type args struct {
13721380
signatureName string
@@ -1443,6 +1451,30 @@ func Test_signRequestDebug(t *testing.T) {
14431451
wantSignatureBase: "\"cache-control\": max-age=60, must-revalidate\n\"example-dict\";key=\"a\": 1\n\"example-dict\";key=\"b\": 2;x=1;y=2\n\"example-dict\";key=\"c\": (a b c)\n\"@signature-params\": (\"cache-control\" \"example-dict\";key=\"a\" \"example-dict\";key=\"b\" \"example-dict\";key=\"c\");alg=\"hmac-sha256\";keyid=\"test-key-hmac\"",
14441452
wantErr: false,
14451453
},
1454+
{
1455+
name: "issue #1, @request-target",
1456+
args: args{
1457+
signatureName: "sig1",
1458+
signer: makeHMACSigner(*NewSignConfig().SignCreated(false), Headers("@request-target")),
1459+
req: readRequest(httpreq2),
1460+
},
1461+
wantSignatureInput: "sig1=(\"@request-target\");alg=\"hmac-sha256\";keyid=\"test-key-hmac\"",
1462+
wantSignature: "sig1=:z8fRhDS1tbmNinLWIUKLGgUT7e/Kk4lda3zwGVxJJGA=:",
1463+
wantSignatureBase: "\"@request-target\": /foo?param=value&pet=dog&pet=snake&bar=baz\n\"@signature-params\": (\"@request-target\");alg=\"hmac-sha256\";keyid=\"test-key-hmac\"",
1464+
wantErr: false,
1465+
},
1466+
{
1467+
name: "issue #1, @request-target, no path params",
1468+
args: args{
1469+
signatureName: "sig1",
1470+
signer: makeHMACSigner(*NewSignConfig().SignCreated(false), Headers("@request-target")),
1471+
req: readRequest(httpreq5),
1472+
},
1473+
wantSignatureInput: "sig1=(\"@request-target\");alg=\"hmac-sha256\";keyid=\"test-key-hmac\"",
1474+
wantSignature: "sig1=:QH4dlxNv1P4mbPlWE3PwOc3sp1oeC2rE/OESjve4JJQ=:",
1475+
wantSignatureBase: "\"@request-target\": /foo\n\"@signature-params\": (\"@request-target\");alg=\"hmac-sha256\";keyid=\"test-key-hmac\"",
1476+
wantErr: false,
1477+
},
14461478
}
14471479
for _, tt := range tests {
14481480
t.Run(tt.name, func(t *testing.T) {

0 commit comments

Comments
 (0)