diff options
Diffstat (limited to 'vendor/github.com/aws/aws-sdk-go/private/protocol')
7 files changed, 162 insertions, 13 deletions
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go new file mode 100644 index 0000000..d7d42db --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go | |||
@@ -0,0 +1,68 @@ | |||
1 | package protocol | ||
2 | |||
3 | import ( | ||
4 | "strings" | ||
5 | |||
6 | "github.com/aws/aws-sdk-go/aws/request" | ||
7 | ) | ||
8 | |||
9 | // ValidateEndpointHostHandler is a request handler that will validate the | ||
10 | // request endpoint's hosts is a valid RFC 3986 host. | ||
11 | var ValidateEndpointHostHandler = request.NamedHandler{ | ||
12 | Name: "awssdk.protocol.ValidateEndpointHostHandler", | ||
13 | Fn: func(r *request.Request) { | ||
14 | err := ValidateEndpointHost(r.Operation.Name, r.HTTPRequest.URL.Host) | ||
15 | if err != nil { | ||
16 | r.Error = err | ||
17 | } | ||
18 | }, | ||
19 | } | ||
20 | |||
21 | // ValidateEndpointHost validates that the host string passed in is a valid RFC | ||
22 | // 3986 host. Returns error if the host is not valid. | ||
23 | func ValidateEndpointHost(opName, host string) error { | ||
24 | paramErrs := request.ErrInvalidParams{Context: opName} | ||
25 | labels := strings.Split(host, ".") | ||
26 | |||
27 | for i, label := range labels { | ||
28 | if i == len(labels)-1 && len(label) == 0 { | ||
29 | // Allow trailing dot for FQDN hosts. | ||
30 | continue | ||
31 | } | ||
32 | |||
33 | if !ValidHostLabel(label) { | ||
34 | paramErrs.Add(request.NewErrParamFormat( | ||
35 | "endpoint host label", "[a-zA-Z0-9-]{1,63}", label)) | ||
36 | } | ||
37 | } | ||
38 | |||
39 | if len(host) > 255 { | ||
40 | paramErrs.Add(request.NewErrParamMaxLen( | ||
41 | "endpoint host", 255, host, | ||
42 | )) | ||
43 | } | ||
44 | |||
45 | if paramErrs.Len() > 0 { | ||
46 | return paramErrs | ||
47 | } | ||
48 | return nil | ||
49 | } | ||
50 | |||
51 | // ValidHostLabel returns if the label is a valid RFC 3986 host label. | ||
52 | func ValidHostLabel(label string) bool { | ||
53 | if l := len(label); l == 0 || l > 63 { | ||
54 | return false | ||
55 | } | ||
56 | for _, r := range label { | ||
57 | switch { | ||
58 | case r >= '0' && r <= '9': | ||
59 | case r >= 'A' && r <= 'Z': | ||
60 | case r >= 'a' && r <= 'z': | ||
61 | case r == '-': | ||
62 | default: | ||
63 | return false | ||
64 | } | ||
65 | } | ||
66 | |||
67 | return true | ||
68 | } | ||
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go new file mode 100644 index 0000000..915b0fc --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go | |||
@@ -0,0 +1,54 @@ | |||
1 | package protocol | ||
2 | |||
3 | import ( | ||
4 | "strings" | ||
5 | |||
6 | "github.com/aws/aws-sdk-go/aws" | ||
7 | "github.com/aws/aws-sdk-go/aws/request" | ||
8 | ) | ||
9 | |||
10 | // HostPrefixHandlerName is the handler name for the host prefix request | ||
11 | // handler. | ||
12 | const HostPrefixHandlerName = "awssdk.endpoint.HostPrefixHandler" | ||
13 | |||
14 | // NewHostPrefixHandler constructs a build handler | ||
15 | func NewHostPrefixHandler(prefix string, labelsFn func() map[string]string) request.NamedHandler { | ||
16 | builder := HostPrefixBuilder{ | ||
17 | Prefix: prefix, | ||
18 | LabelsFn: labelsFn, | ||
19 | } | ||
20 | |||
21 | return request.NamedHandler{ | ||
22 | Name: HostPrefixHandlerName, | ||
23 | Fn: builder.Build, | ||
24 | } | ||
25 | } | ||
26 | |||
27 | // HostPrefixBuilder provides the request handler to expand and prepend | ||
28 | // the host prefix into the operation's request endpoint host. | ||
29 | type HostPrefixBuilder struct { | ||
30 | Prefix string | ||
31 | LabelsFn func() map[string]string | ||
32 | } | ||
33 | |||
34 | // Build updates the passed in Request with the HostPrefix template expanded. | ||
35 | func (h HostPrefixBuilder) Build(r *request.Request) { | ||
36 | if aws.BoolValue(r.Config.DisableEndpointHostPrefix) { | ||
37 | return | ||
38 | } | ||
39 | |||
40 | var labels map[string]string | ||
41 | if h.LabelsFn != nil { | ||
42 | labels = h.LabelsFn() | ||
43 | } | ||
44 | |||
45 | prefix := h.Prefix | ||
46 | for name, value := range labels { | ||
47 | prefix = strings.Replace(prefix, "{"+name+"}", value, -1) | ||
48 | } | ||
49 | |||
50 | r.HTTPRequest.URL.Host = prefix + r.HTTPRequest.URL.Host | ||
51 | if len(r.HTTPRequest.Host) > 0 { | ||
52 | r.HTTPRequest.Host = prefix + r.HTTPRequest.Host | ||
53 | } | ||
54 | } | ||
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go index e0f4d5a..3495c73 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go | |||
@@ -23,7 +23,11 @@ func Unmarshal(r *request.Request) { | |||
23 | decoder := xml.NewDecoder(r.HTTPResponse.Body) | 23 | decoder := xml.NewDecoder(r.HTTPResponse.Body) |
24 | err := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+"Result") | 24 | err := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+"Result") |
25 | if err != nil { | 25 | if err != nil { |
26 | r.Error = awserr.New("SerializationError", "failed decoding Query response", err) | 26 | r.Error = awserr.NewRequestFailure( |
27 | awserr.New("SerializationError", "failed decoding Query response", err), | ||
28 | r.HTTPResponse.StatusCode, | ||
29 | r.RequestID, | ||
30 | ) | ||
27 | return | 31 | return |
28 | } | 32 | } |
29 | } | 33 | } |
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go index f214296..46d354e 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go | |||
@@ -28,7 +28,11 @@ func UnmarshalError(r *request.Request) { | |||
28 | 28 | ||
29 | bodyBytes, err := ioutil.ReadAll(r.HTTPResponse.Body) | 29 | bodyBytes, err := ioutil.ReadAll(r.HTTPResponse.Body) |
30 | if err != nil { | 30 | if err != nil { |
31 | r.Error = awserr.New("SerializationError", "failed to read from query HTTP response body", err) | 31 | r.Error = awserr.NewRequestFailure( |
32 | awserr.New("SerializationError", "failed to read from query HTTP response body", err), | ||
33 | r.HTTPResponse.StatusCode, | ||
34 | r.RequestID, | ||
35 | ) | ||
32 | return | 36 | return |
33 | } | 37 | } |
34 | 38 | ||
@@ -61,6 +65,10 @@ func UnmarshalError(r *request.Request) { | |||
61 | } | 65 | } |
62 | 66 | ||
63 | // Failed to retrieve any error message from the response body | 67 | // Failed to retrieve any error message from the response body |
64 | r.Error = awserr.New("SerializationError", | 68 | r.Error = awserr.NewRequestFailure( |
65 | "failed to decode query XML error response", decodeErr) | 69 | awserr.New("SerializationError", |
70 | "failed to decode query XML error response", decodeErr), | ||
71 | r.HTTPResponse.StatusCode, | ||
72 | r.RequestID, | ||
73 | ) | ||
66 | } | 74 | } |
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go index b34f525..b80f84f 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go | |||
@@ -155,6 +155,9 @@ func buildHeader(header *http.Header, v reflect.Value, name string, tag reflect. | |||
155 | return awserr.New("SerializationError", "failed to encode REST request", err) | 155 | return awserr.New("SerializationError", "failed to encode REST request", err) |
156 | } | 156 | } |
157 | 157 | ||
158 | name = strings.TrimSpace(name) | ||
159 | str = strings.TrimSpace(str) | ||
160 | |||
158 | header.Add(name, str) | 161 | header.Add(name, str) |
159 | 162 | ||
160 | return nil | 163 | return nil |
@@ -170,8 +173,10 @@ func buildHeaderMap(header *http.Header, v reflect.Value, tag reflect.StructTag) | |||
170 | return awserr.New("SerializationError", "failed to encode REST request", err) | 173 | return awserr.New("SerializationError", "failed to encode REST request", err) |
171 | 174 | ||
172 | } | 175 | } |
176 | keyStr := strings.TrimSpace(key.String()) | ||
177 | str = strings.TrimSpace(str) | ||
173 | 178 | ||
174 | header.Add(prefix+key.String(), str) | 179 | header.Add(prefix+keyStr, str) |
175 | } | 180 | } |
176 | return nil | 181 | return nil |
177 | } | 182 | } |
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go index 7bdf4c8..b0f4e24 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go | |||
@@ -36,7 +36,11 @@ func Build(r *request.Request) { | |||
36 | var buf bytes.Buffer | 36 | var buf bytes.Buffer |
37 | err := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf)) | 37 | err := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf)) |
38 | if err != nil { | 38 | if err != nil { |
39 | r.Error = awserr.New("SerializationError", "failed to encode rest XML request", err) | 39 | r.Error = awserr.NewRequestFailure( |
40 | awserr.New("SerializationError", "failed to encode rest XML request", err), | ||
41 | r.HTTPResponse.StatusCode, | ||
42 | r.RequestID, | ||
43 | ) | ||
40 | return | 44 | return |
41 | } | 45 | } |
42 | r.SetBufferBody(buf.Bytes()) | 46 | r.SetBufferBody(buf.Bytes()) |
@@ -50,7 +54,11 @@ func Unmarshal(r *request.Request) { | |||
50 | decoder := xml.NewDecoder(r.HTTPResponse.Body) | 54 | decoder := xml.NewDecoder(r.HTTPResponse.Body) |
51 | err := xmlutil.UnmarshalXML(r.Data, decoder, "") | 55 | err := xmlutil.UnmarshalXML(r.Data, decoder, "") |
52 | if err != nil { | 56 | if err != nil { |
53 | r.Error = awserr.New("SerializationError", "failed to decode REST XML response", err) | 57 | r.Error = awserr.NewRequestFailure( |
58 | awserr.New("SerializationError", "failed to decode REST XML response", err), | ||
59 | r.HTTPResponse.StatusCode, | ||
60 | r.RequestID, | ||
61 | ) | ||
54 | return | 62 | return |
55 | } | 63 | } |
56 | } else { | 64 | } else { |
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go index 07764c8..cf981fe 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go | |||
@@ -87,15 +87,13 @@ func (b *xmlBuilder) buildValue(value reflect.Value, current *XMLNode, tag refle | |||
87 | } | 87 | } |
88 | } | 88 | } |
89 | 89 | ||
90 | // buildStruct adds a struct and its fields to the current XMLNode. All fields any any nested | 90 | // buildStruct adds a struct and its fields to the current XMLNode. All fields and any nested |
91 | // types are converted to XMLNodes also. | 91 | // types are converted to XMLNodes also. |
92 | func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag reflect.StructTag) error { | 92 | func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag reflect.StructTag) error { |
93 | if !value.IsValid() { | 93 | if !value.IsValid() { |
94 | return nil | 94 | return nil |
95 | } | 95 | } |
96 | 96 | ||
97 | fieldAdded := false | ||
98 | |||
99 | // unwrap payloads | 97 | // unwrap payloads |
100 | if payload := tag.Get("payload"); payload != "" { | 98 | if payload := tag.Get("payload"); payload != "" { |
101 | field, _ := value.Type().FieldByName(payload) | 99 | field, _ := value.Type().FieldByName(payload) |
@@ -123,6 +121,8 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl | |||
123 | child.Attr = append(child.Attr, ns) | 121 | child.Attr = append(child.Attr, ns) |
124 | } | 122 | } |
125 | 123 | ||
124 | var payloadFields, nonPayloadFields int | ||
125 | |||
126 | t := value.Type() | 126 | t := value.Type() |
127 | for i := 0; i < value.NumField(); i++ { | 127 | for i := 0; i < value.NumField(); i++ { |
128 | member := elemOf(value.Field(i)) | 128 | member := elemOf(value.Field(i)) |
@@ -137,8 +137,10 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl | |||
137 | 137 | ||
138 | mTag := field.Tag | 138 | mTag := field.Tag |
139 | if mTag.Get("location") != "" { // skip non-body members | 139 | if mTag.Get("location") != "" { // skip non-body members |
140 | nonPayloadFields++ | ||
140 | continue | 141 | continue |
141 | } | 142 | } |
143 | payloadFields++ | ||
142 | 144 | ||
143 | if protocol.CanSetIdempotencyToken(value.Field(i), field) { | 145 | if protocol.CanSetIdempotencyToken(value.Field(i), field) { |
144 | token := protocol.GetIdempotencyToken() | 146 | token := protocol.GetIdempotencyToken() |
@@ -153,11 +155,11 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl | |||
153 | if err := b.buildValue(member, child, mTag); err != nil { | 155 | if err := b.buildValue(member, child, mTag); err != nil { |
154 | return err | 156 | return err |
155 | } | 157 | } |
156 | |||
157 | fieldAdded = true | ||
158 | } | 158 | } |
159 | 159 | ||
160 | if fieldAdded { // only append this child if we have one ore more valid members | 160 | // Only case where the child shape is not added is if the shape only contains |
161 | // non-payload fields, e.g headers/query. | ||
162 | if !(payloadFields == 0 && nonPayloadFields > 0) { | ||
161 | current.AddChild(child) | 163 | current.AddChild(child) |
162 | } | 164 | } |
163 | 165 | ||