package http
import (
)
const contentMD5Header = "Content-Md5"
type contentMD5Checksum struct {
}
func ( *middleware.Stack) error {
return .Build.Add(&contentMD5Checksum{}, middleware.Before)
}
func ( *contentMD5Checksum) () string { return "ContentChecksum" }
func ( *contentMD5Checksum) (
context.Context, middleware.BuildInput, middleware.BuildHandler,
) (
middleware.BuildOutput, middleware.Metadata, error,
) {
, := .Request.(*Request)
if ! {
return , , fmt.Errorf("unknown request type %T", )
}
if := .Header.Get(contentMD5Header); len() != 0 {
return .HandleBuild(, )
}
:= .GetStream()
if != nil {
if !.IsStreamSeekable() {
return , , fmt.Errorf(
"unseekable stream is not supported for computing md5 checksum")
}
, := computeMD5Checksum()
if != nil {
return , , fmt.Errorf("error computing md5 checksum, %w", )
}
if := .RewindStream(); != nil {
return , , fmt.Errorf(
"error rewinding request stream after computing md5 checksum, %w", )
}
.Header.Set(contentMD5Header, string())
}
return .HandleBuild(, )
}