From dcd9e2594f073a98a3500863c9a769c5fdbb5f59 Mon Sep 17 00:00:00 2001 From: Derek Burdick Date: Thu, 22 Oct 2015 20:19:26 +0000 Subject: [PATCH 1/2] Can guess region and service from elastic search service URL's --- common.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common.go b/common.go index c6eec00..d4bea47 100644 --- a/common.go +++ b/common.go @@ -45,6 +45,9 @@ func serviceAndRegion(host string) (service string, region string) { service = parts[0] region = parts[1] } + } else if len(parts) == 5 { + service = parts[2] + region = parts[1] } else { // Either service.amazonaws.com or s3-region.amazonaws.com if strings.HasPrefix(parts[0], "s3-") { From 483ac9d2c646cc5ba6c9ceeb5543d35b39c541d5 Mon Sep 17 00:00:00 2001 From: Derek Burdick Date: Wed, 28 Oct 2015 12:51:38 -0700 Subject: [PATCH 2/2] Signing does not include port segment in host header if it is 80 or 443 --- sign4.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sign4.go b/sign4.go index b5f3e59..89770bd 100644 --- a/sign4.go +++ b/sign4.go @@ -33,6 +33,16 @@ func hashedCanonicalRequestV4(request *http.Request, meta *metadata) string { var headersToSign string for _, key := range sortedHeaderKeys { value := strings.TrimSpace(request.Header.Get(key)) + if key == "host" { + //AWS does not include port in signing request. + if strings.Contains(value, ":") { + split := strings.Split(value, ":") + port := split[1] + if port == "80" || port == "443" { + value = split[0] + } + } + } headersToSign += key + ":" + value + "\n" } meta.signedHeaders = concat(";", sortedHeaderKeys...)