| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 
							- <?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}).");
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |