1package s3shared 2 3import ( 4 "strings" 5 6 "github.com/aws/aws-sdk-go/aws" 7 awsarn "github.com/aws/aws-sdk-go/aws/arn" 8 "github.com/aws/aws-sdk-go/aws/request" 9 "github.com/aws/aws-sdk-go/internal/s3shared/arn" 10) 11 12// ResourceRequest represents the request and arn resource 13type ResourceRequest struct { 14 Resource arn.Resource 15 Request *request.Request 16} 17 18// ARN returns the resource ARN 19func (r ResourceRequest) ARN() awsarn.ARN { 20 return r.Resource.GetARN() 21} 22 23// AllowCrossRegion returns a bool value to denote if S3UseARNRegion flag is set 24func (r ResourceRequest) AllowCrossRegion() bool { 25 return aws.BoolValue(r.Request.Config.S3UseARNRegion) 26} 27 28// UseFIPS returns true if request config region is FIPS 29func (r ResourceRequest) UseFIPS() bool { 30 return IsFIPS(aws.StringValue(r.Request.Config.Region)) 31} 32 33// ResourceConfiguredForFIPS returns true if resource ARNs region is FIPS 34// 35// Deprecated: FIPS pseudo-regions will not be in the ARN 36func (r ResourceRequest) ResourceConfiguredForFIPS() bool { 37 return IsFIPS(r.ARN().Region) 38} 39 40// IsCrossPartition returns true if client is configured for another partition, than 41// the partition that resource ARN region resolves to. 42func (r ResourceRequest) IsCrossPartition() bool { 43 return r.Request.ClientInfo.PartitionID != r.Resource.GetARN().Partition 44} 45 46// IsCrossRegion returns true if ARN region is different than client configured region 47func (r ResourceRequest) IsCrossRegion() bool { 48 return IsCrossRegion(r.Request, r.Resource.GetARN().Region) 49} 50 51// HasCustomEndpoint returns true if custom client endpoint is provided 52func (r ResourceRequest) HasCustomEndpoint() bool { 53 return len(aws.StringValue(r.Request.Config.Endpoint)) > 0 54} 55 56// IsFIPS returns true if region is a fips region 57func IsFIPS(clientRegion string) bool { 58 return strings.HasPrefix(clientRegion, "fips-") || strings.HasSuffix(clientRegion, "-fips") 59} 60 61// IsCrossRegion returns true if request signing region is not same as configured region 62func IsCrossRegion(req *request.Request, otherRegion string) bool { 63 return req.ClientInfo.SigningRegion != otherRegion 64} 65