don't fail if scope container more the one grand. (#92)

This commit is contained in:
Vadim Bauer 2018-06-04 22:42:58 +02:00 committed by Jess Frazelle
parent 19f124dca5
commit 22f6936237
2 changed files with 26 additions and 5 deletions

View file

@ -32,7 +32,7 @@ func parseChallenge(challengeHeader string) (*authService, error) {
if d := len(match); d != 1 {
return nil, fmt.Errorf("malformed auth challenge header: '%s', %d", challengeHeader, d)
}
parts := strings.Split(strings.TrimSpace(match[0][1]), ",")
parts := strings.SplitN(strings.TrimSpace(match[0][1]), ",",3)
var realm, service string
var scope []string

View file

@ -1,7 +1,6 @@
package registry
import (
"reflect"
"strings"
"testing"
)
@ -22,9 +21,8 @@ func (asm authServiceMock) equalTo(v *authService) bool {
if asm.service != v.Service {
return false
}
if reflect.DeepEqual(asm.scope, v.Scope) {
return false
}
for i, v := range v.Scope { if v != asm.scope[i] { return false } }
if asm.realm != v.Realm.String() {
return false
}
@ -53,3 +51,26 @@ func TestParseChallenge(t *testing.T) {
}
}
func TestParseChallengePush(t *testing.T) {
challengeHeaderCases := []challengeTestCase{
{
header: `Bearer realm="https://foo.com/v2/token",service="foo.com",scope="repository:pdr/tls:pull,push"`,
value: authServiceMock{
realm: "https://foo.com/v2/token",
service: "foo.com",
scope: []string{"repository:pdr/tls:pull,push"},
},
},
}
for _, tc := range challengeHeaderCases {
val, err := parseChallenge(tc.header)
if err != nil && !strings.Contains(err.Error(), tc.errorString) {
t.Fatalf("expected error to contain %v, got %s", tc.errorString, err)
}
if !tc.value.equalTo(val) {
t.Fatalf("got %v, expected %v", val, tc.value)
}
}
}