support stale=FALSE in authentication header

This commit is contained in:
aler9
2020-01-26 18:25:31 +01:00
parent 13da0e6723
commit 67b9542061
2 changed files with 18 additions and 4 deletions

View File

@@ -20,19 +20,21 @@ func ReadHeaderAuth(in string) (*HeaderAuth, error) {
i := strings.IndexByte(in, ' ') i := strings.IndexByte(in, ' ')
if i < 0 { if i < 0 {
return nil, fmt.Errorf("parse error") return nil, fmt.Errorf("unable to find prefix (%s)", in)
} }
a.Prefix, in = in[:i], in[i+1:] a.Prefix, in = in[:i], in[i+1:]
r := regexp.MustCompile("^([a-z]+)=\"(.+?)\"(, )?") r := regexp.MustCompile("^([a-z]+)=(\"(.+?)\"|([a-zA-Z0-9]+))(, )?")
for len(in) > 0 { for len(in) > 0 {
m := r.FindStringSubmatch(in) m := r.FindStringSubmatch(in)
if m == nil { if m == nil {
return nil, fmt.Errorf("parse error") return nil, fmt.Errorf("unable to parse key-value (%s)", in)
} }
in = in[len(m[0]):] in = in[len(m[0]):]
m[2] = strings.TrimPrefix(m[2], "\"")
m[2] = strings.TrimSuffix(m[2], "\"")
a.Values[m[1]] = m[2] a.Values[m[1]] = m[2]
} }

View File

@@ -22,7 +22,7 @@ var casesHeaderAuth = []struct {
}, },
}, },
{ {
"digest request", "digest request 1",
`Digest realm="4419b63f5e51", nonce="8b84a3b789283a8bea8da7fa7d41f08b", stale="FALSE"`, `Digest realm="4419b63f5e51", nonce="8b84a3b789283a8bea8da7fa7d41f08b", stale="FALSE"`,
&HeaderAuth{ &HeaderAuth{
Prefix: "Digest", Prefix: "Digest",
@@ -33,6 +33,18 @@ var casesHeaderAuth = []struct {
}, },
}, },
}, },
{
"digest request 2",
`Digest realm="4419b63f5e51", nonce="8b84a3b789283a8bea8da7fa7d41f08b", stale=FALSE`,
&HeaderAuth{
Prefix: "Digest",
Values: map[string]string{
"realm": "4419b63f5e51",
"nonce": "8b84a3b789283a8bea8da7fa7d41f08b",
"stale": "FALSE",
},
},
},
{ {
"digest response", "digest response",
`Digest username="aa", realm="bb", nonce="cc", uri="dd", response="ee"`, `Digest username="aa", realm="bb", nonce="cc", uri="dd", response="ee"`,