From b0a89b1f1b8c6eeb06958f551ed3b2e835d6be27 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Tue, 10 Nov 2015 18:10:27 -0800 Subject: [PATCH] signature: Handle all corner cases with spaces. --- api-signature.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/api-signature.go b/api-signature.go index b1c97bf94..27b3543da 100644 --- a/api-signature.go +++ b/api-signature.go @@ -40,18 +40,20 @@ func getCredentialsFromAuth(authValue string) ([]string, *probe.Error) { if authValue == "" { return nil, probe.NewError(errMissingAuthHeaderValue) } - authFields := strings.Split(strings.TrimSpace(authValue), ",") - if len(authFields) != 3 { - return nil, probe.NewError(errInvalidAuthHeaderValue) - } - authPrefixFields := strings.Fields(authFields[0]) - if len(authPrefixFields) != 2 { + // replace all spaced strings + authValue = strings.Replace(authValue, " ", "", -1) + if !strings.HasPrefix(authValue, authHeaderPrefix) { return nil, probe.NewError(errMissingFieldsAuthHeader) } - if authPrefixFields[0] != authHeaderPrefix { + if !strings.HasPrefix(strings.TrimPrefix(authValue, authHeaderPrefix), "Credential") { return nil, probe.NewError(errInvalidAuthHeaderPrefix) } - credentials := strings.Split(strings.TrimSpace(authPrefixFields[1]), "=") + authValue = strings.TrimPrefix(authValue, authHeaderPrefix) + authFields := strings.Split(strings.TrimSpace(authValue), ",") + if len(authFields) != 3 { + return nil, probe.NewError(errInvalidAuthHeaderValue) + } + credentials := strings.Split(strings.TrimSpace(authFields[0]), "=") if len(credentials) != 2 { return nil, probe.NewError(errMissingFieldsCredentialTag) }