You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
6.1 KiB
Go
181 lines
6.1 KiB
Go
package middleware
|
|
|
|
import (
|
|
"context"
|
|
"github.com/aws/aws-sdk-go-v2/aws"
|
|
|
|
"github.com/aws/smithy-go/middleware"
|
|
)
|
|
|
|
// RegisterServiceMetadata registers metadata about the service and operation into the middleware context
|
|
// so that it is available at runtime for other middleware to introspect.
|
|
type RegisterServiceMetadata struct {
|
|
ServiceID string
|
|
SigningName string
|
|
Region string
|
|
OperationName string
|
|
}
|
|
|
|
// ID returns the middleware identifier.
|
|
func (s *RegisterServiceMetadata) ID() string {
|
|
return "RegisterServiceMetadata"
|
|
}
|
|
|
|
// HandleInitialize registers service metadata information into the middleware context, allowing for introspection.
|
|
func (s RegisterServiceMetadata) HandleInitialize(
|
|
ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler,
|
|
) (out middleware.InitializeOutput, metadata middleware.Metadata, err error) {
|
|
if len(s.ServiceID) > 0 {
|
|
ctx = SetServiceID(ctx, s.ServiceID)
|
|
}
|
|
if len(s.SigningName) > 0 {
|
|
ctx = SetSigningName(ctx, s.SigningName)
|
|
}
|
|
if len(s.Region) > 0 {
|
|
ctx = setRegion(ctx, s.Region)
|
|
}
|
|
if len(s.OperationName) > 0 {
|
|
ctx = setOperationName(ctx, s.OperationName)
|
|
}
|
|
return next.HandleInitialize(ctx, in)
|
|
}
|
|
|
|
// service metadata keys for storing and lookup of runtime stack information.
|
|
type (
|
|
serviceIDKey struct{}
|
|
signingNameKey struct{}
|
|
signingRegionKey struct{}
|
|
regionKey struct{}
|
|
operationNameKey struct{}
|
|
partitionIDKey struct{}
|
|
)
|
|
|
|
// GetServiceID retrieves the service id from the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func GetServiceID(ctx context.Context) (v string) {
|
|
v, _ = middleware.GetStackValue(ctx, serviceIDKey{}).(string)
|
|
return v
|
|
}
|
|
|
|
// GetSigningName retrieves the service signing name from the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func GetSigningName(ctx context.Context) (v string) {
|
|
v, _ = middleware.GetStackValue(ctx, signingNameKey{}).(string)
|
|
return v
|
|
}
|
|
|
|
// GetSigningRegion retrieves the region from the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func GetSigningRegion(ctx context.Context) (v string) {
|
|
v, _ = middleware.GetStackValue(ctx, signingRegionKey{}).(string)
|
|
return v
|
|
}
|
|
|
|
// GetRegion retrieves the endpoint region from the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func GetRegion(ctx context.Context) (v string) {
|
|
v, _ = middleware.GetStackValue(ctx, regionKey{}).(string)
|
|
return v
|
|
}
|
|
|
|
// GetOperationName retrieves the service operation metadata from the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func GetOperationName(ctx context.Context) (v string) {
|
|
v, _ = middleware.GetStackValue(ctx, operationNameKey{}).(string)
|
|
return v
|
|
}
|
|
|
|
// GetPartitionID retrieves the endpoint partition id from the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func GetPartitionID(ctx context.Context) string {
|
|
v, _ := middleware.GetStackValue(ctx, partitionIDKey{}).(string)
|
|
return v
|
|
}
|
|
|
|
// SetSigningName set or modifies the signing name on the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func SetSigningName(ctx context.Context, value string) context.Context {
|
|
return middleware.WithStackValue(ctx, signingNameKey{}, value)
|
|
}
|
|
|
|
// SetSigningRegion sets or modifies the region on the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func SetSigningRegion(ctx context.Context, value string) context.Context {
|
|
return middleware.WithStackValue(ctx, signingRegionKey{}, value)
|
|
}
|
|
|
|
// SetServiceID sets the service id on the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func SetServiceID(ctx context.Context, value string) context.Context {
|
|
return middleware.WithStackValue(ctx, serviceIDKey{}, value)
|
|
}
|
|
|
|
// setRegion sets the endpoint region on the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func setRegion(ctx context.Context, value string) context.Context {
|
|
return middleware.WithStackValue(ctx, regionKey{}, value)
|
|
}
|
|
|
|
// setOperationName sets the service operation on the context.
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func setOperationName(ctx context.Context, value string) context.Context {
|
|
return middleware.WithStackValue(ctx, operationNameKey{}, value)
|
|
}
|
|
|
|
// SetPartitionID sets the partition id of a resolved region on the context
|
|
//
|
|
// Scoped to stack values. Use github.com/aws/smithy-go/middleware#ClearStackValues
|
|
// to clear all stack values.
|
|
func SetPartitionID(ctx context.Context, value string) context.Context {
|
|
return middleware.WithStackValue(ctx, partitionIDKey{}, value)
|
|
}
|
|
|
|
// EndpointSource key
|
|
type endpointSourceKey struct{}
|
|
|
|
// GetEndpointSource returns an endpoint source if set on context
|
|
func GetEndpointSource(ctx context.Context) (v aws.EndpointSource) {
|
|
v, _ = middleware.GetStackValue(ctx, endpointSourceKey{}).(aws.EndpointSource)
|
|
return v
|
|
}
|
|
|
|
// SetEndpointSource sets endpoint source on context
|
|
func SetEndpointSource(ctx context.Context, value aws.EndpointSource) context.Context {
|
|
return middleware.WithStackValue(ctx, endpointSourceKey{}, value)
|
|
}
|
|
|
|
type signingCredentialsKey struct{}
|
|
|
|
// GetSigningCredentials returns the credentials that were used for signing if set on context.
|
|
func GetSigningCredentials(ctx context.Context) (v aws.Credentials) {
|
|
v, _ = middleware.GetStackValue(ctx, signingCredentialsKey{}).(aws.Credentials)
|
|
return v
|
|
}
|
|
|
|
// SetSigningCredentials sets the credentails used for signing on the context.
|
|
func SetSigningCredentials(ctx context.Context, value aws.Credentials) context.Context {
|
|
return middleware.WithStackValue(ctx, signingCredentialsKey{}, value)
|
|
}
|