package checksum
import (
smithyhttp
)
type outputValidationAlgorithmsUsedKey struct{}
func ( middleware.Metadata) ([]string, bool) {
, := .Get(outputValidationAlgorithmsUsedKey{}).([]string)
return ,
}
func ( *middleware.Metadata, []string) {
.Set(outputValidationAlgorithmsUsedKey{}, )
}
type validateOutputPayloadChecksum struct {
Algorithms []Algorithm
IgnoreMultipartValidation bool
LogValidationSkipped bool
LogMultipartValidationSkipped bool
}
func ( *validateOutputPayloadChecksum) () string {
return "AWSChecksum:ValidateOutputPayloadChecksum"
}
func ( *validateOutputPayloadChecksum) (
context.Context, middleware.DeserializeInput, middleware.DeserializeHandler,
) (
middleware.DeserializeOutput, middleware.Metadata, error,
) {
, , = .HandleDeserialize(, )
if != nil {
return , ,
}
if := getContextOutputValidationMode(); != "ENABLED" {
return , ,
}
, := .RawResponse.(*smithyhttp.Response)
if ! {
return , , &smithy.DeserializationError{
Err: fmt.Errorf("unknown transport type %T", .RawResponse),
}
}
var string
var Algorithm
for , := range .Algorithms {
:= .Header.Get(AlgorithmHTTPHeader())
if len() == 0 {
continue
}
=
=
}
:= middleware.GetLogger()
if len() == 0 || len() == 0 {
if .LogValidationSkipped {
.Logf(logging.Warn,
"Response has no supported checksum. Not validating response payload.")
}
return , , nil
}
if .IgnoreMultipartValidation && strings.Contains(, "-") {
if .LogMultipartValidationSkipped {
.Logf(logging.Warn, "Skipped validation of multipart checksum.")
}
return , , nil
}
, := newValidateChecksumReader(.Body, , )
if != nil {
return , , fmt.Errorf("failed to create checksum validation reader, %w", )
}
.Body =
SetOutputValidationAlgorithmsUsed(&, []string{
string(),
})
return , , nil
}