forked from TrueCloudLab/distribution
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
|
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
|
||
|
}
|
||
|
}
|