| package protocol |
| |
| import ( |
| "strings" |
| |
| "github.com/aws/aws-sdk-go/aws" |
| "github.com/aws/aws-sdk-go/aws/request" |
| ) |
| |
| // HostPrefixHandlerName is the handler name for the host prefix request |
| // handler. |
| const HostPrefixHandlerName = "awssdk.endpoint.HostPrefixHandler" |
| |
| // NewHostPrefixHandler constructs a build handler |
| func NewHostPrefixHandler(prefix string, labelsFn func() map[string]string) request.NamedHandler { |
| builder := HostPrefixBuilder{ |
| Prefix: prefix, |
| LabelsFn: labelsFn, |
| } |
| |
| return request.NamedHandler{ |
| Name: HostPrefixHandlerName, |
| Fn: builder.Build, |
| } |
| } |
| |
| // HostPrefixBuilder provides the request handler to expand and prepend |
| // the host prefix into the operation's request endpoint host. |
| type HostPrefixBuilder struct { |
| Prefix string |
| LabelsFn func() map[string]string |
| } |
| |
| // Build updates the passed in Request with the HostPrefix template expanded. |
| func (h HostPrefixBuilder) Build(r *request.Request) { |
| if aws.BoolValue(r.Config.DisableEndpointHostPrefix) { |
| return |
| } |
| |
| var labels map[string]string |
| if h.LabelsFn != nil { |
| labels = h.LabelsFn() |
| } |
| |
| prefix := h.Prefix |
| for name, value := range labels { |
| prefix = strings.Replace(prefix, "{"+name+"}", value, -1) |
| } |
| |
| r.HTTPRequest.URL.Host = prefix + r.HTTPRequest.URL.Host |
| if len(r.HTTPRequest.Host) > 0 { |
| r.HTTPRequest.Host = prefix + r.HTTPRequest.Host |
| } |
| } |