customizations.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package s3
  2. import (
  3. "github.com/aws/aws-sdk-go/aws/client"
  4. "github.com/aws/aws-sdk-go/aws/request"
  5. )
  6. func init() {
  7. initClient = defaultInitClientFn
  8. initRequest = defaultInitRequestFn
  9. }
  10. func defaultInitClientFn(c *client.Client) {
  11. // Support building custom endpoints based on config
  12. c.Handlers.Build.PushFront(updateEndpointForS3Config)
  13. // Require SSL when using SSE keys
  14. c.Handlers.Validate.PushBack(validateSSERequiresSSL)
  15. c.Handlers.Build.PushBack(computeSSEKeys)
  16. // S3 uses custom error unmarshaling logic
  17. c.Handlers.UnmarshalError.Clear()
  18. c.Handlers.UnmarshalError.PushBack(unmarshalError)
  19. }
  20. func defaultInitRequestFn(r *request.Request) {
  21. // Add reuest handlers for specific platforms.
  22. // e.g. 100-continue support for PUT requests using Go 1.6
  23. platformRequestHandlers(r)
  24. switch r.Operation.Name {
  25. case opPutBucketCors, opPutBucketLifecycle, opPutBucketPolicy,
  26. opPutBucketTagging, opDeleteObjects, opPutBucketLifecycleConfiguration,
  27. opPutBucketReplication:
  28. // These S3 operations require Content-MD5 to be set
  29. r.Handlers.Build.PushBack(contentMD5)
  30. case opGetBucketLocation:
  31. // GetBucketLocation has custom parsing logic
  32. r.Handlers.Unmarshal.PushFront(buildGetBucketLocation)
  33. case opCreateBucket:
  34. // Auto-populate LocationConstraint with current region
  35. r.Handlers.Validate.PushFront(populateLocationConstraint)
  36. case opCopyObject, opUploadPartCopy, opCompleteMultipartUpload:
  37. r.Handlers.Unmarshal.PushFront(copyMultipartStatusOKUnmarhsalError)
  38. }
  39. }