resource_request.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package s3shared
  2. import (
  3. "github.com/aws/aws-sdk-go/aws"
  4. awsarn "github.com/aws/aws-sdk-go/aws/arn"
  5. "github.com/aws/aws-sdk-go/aws/request"
  6. "github.com/aws/aws-sdk-go/internal/s3shared/arn"
  7. )
  8. // ResourceRequest represents the request and arn resource
  9. type ResourceRequest struct {
  10. Resource arn.Resource
  11. Request *request.Request
  12. }
  13. // ARN returns the resource ARN
  14. func (r ResourceRequest) ARN() awsarn.ARN {
  15. return r.Resource.GetARN()
  16. }
  17. // AllowCrossRegion returns a bool value to denote if S3UseARNRegion flag is set
  18. func (r ResourceRequest) AllowCrossRegion() bool {
  19. return aws.BoolValue(r.Request.Config.S3UseARNRegion)
  20. }
  21. // IsCrossPartition returns true if client is configured for another partition, than
  22. // the partition that resource ARN region resolves to.
  23. func (r ResourceRequest) IsCrossPartition() bool {
  24. return r.Request.ClientInfo.PartitionID != r.Resource.GetARN().Partition
  25. }
  26. // IsCrossRegion returns true if ARN region is different than client configured region
  27. func (r ResourceRequest) IsCrossRegion() bool {
  28. return IsCrossRegion(r.Request, r.Resource.GetARN().Region)
  29. }
  30. // HasCustomEndpoint returns true if custom client endpoint is provided
  31. func (r ResourceRequest) HasCustomEndpoint() bool {
  32. return len(aws.StringValue(r.Request.Config.Endpoint)) > 0
  33. }
  34. // IsCrossRegion returns true if request signing region is not same as configured region
  35. func IsCrossRegion(req *request.Request, otherRegion string) bool {
  36. return req.ClientInfo.SigningRegion != otherRegion
  37. }