diff options
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php b/vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php new file mode 100644 index 0000000..3c35c4b --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php @@ -0,0 +1,106 @@ +<?php +namespace Aws\S3; + +use Aws\Api\Service; +use Aws\Arn\ArnInterface; +use Aws\Arn\S3\OutpostsArnInterface; +use Aws\Endpoint\PartitionEndpointProvider; +use Aws\Exception\InvalidRegionException; + +/** + * @internal + */ +trait EndpointRegionHelperTrait +{ + /** @var array */ + private $config; + + /** @var PartitionEndpointProvider */ + private $partitionProvider; + + /** @var string */ + private $region; + + /** @var Service */ + private $service; + + private function getPartitionSuffix( + ArnInterface $arn, + PartitionEndpointProvider $provider + ) { + $partition = $provider->getPartition( + $arn->getRegion(), + $arn->getService() + ); + return $partition->getDnsSuffix(); + } + + private function getSigningRegion( + $region, + $service, + PartitionEndpointProvider $provider + ) { + $partition = $provider->getPartition($region, $service); + $data = $partition->toArray(); + if (isset($data['services'][$service]['endpoints'][$region]['credentialScope']['region'])) { + return $data['services'][$service]['endpoints'][$region]['credentialScope']['region']; + } + return $region; + } + + private function isMatchingSigningRegion( + $arnRegion, + $clientRegion, + $service, + PartitionEndpointProvider $provider + ) { + $arnRegion = \Aws\strip_fips_pseudo_regions(strtolower($arnRegion)); + $clientRegion = strtolower($clientRegion); + if ($arnRegion === $clientRegion) { + return true; + } + if ($this->getSigningRegion($clientRegion, $service, $provider) === $arnRegion) { + return true; + } + return false; + } + + private function validateFipsConfigurations(ArnInterface $arn) + { + $useFipsEndpoint = !empty($this->config['use_fips_endpoint']); + if ($arn instanceof OutpostsArnInterface) { + if (empty($this->config['use_arn_region']) + || !($this->config['use_arn_region']->isUseArnRegion()) + ) { + $region = $this->region; + } else { + $region = $arn->getRegion(); + } + if (\Aws\is_fips_pseudo_region($region)) { + throw new InvalidRegionException( + 'Fips is currently not supported with S3 Outposts access' + . ' points. Please provide a non-fips region or do not supply an' + . ' access point ARN.'); + } + } + } + + private function validateMatchingRegion(ArnInterface $arn) + { + if (!($this->isMatchingSigningRegion( + $arn->getRegion(), + $this->region, + $this->service->getEndpointPrefix(), + $this->partitionProvider) + )) { + if (empty($this->config['use_arn_region']) + || !($this->config['use_arn_region']->isUseArnRegion()) + ) { + throw new InvalidRegionException('The region' + . " specified in the ARN (" . $arn->getRegion() + . ") does not match the client region (" + . "{$this->region})."); + } + } + } +} |