summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2022-11-23 21:14:33 +0300
committerAndrew Dolgov <[email protected]>2022-11-23 21:14:33 +0300
commit0c8af4992cb0f7589dcafaad65ada12753c64594 (patch)
tree18e83d068c3e7dd2499331de977782b382279396 /vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php
initial
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php')
-rw-r--r--vendor/aws/aws-sdk-php/src/S3/EndpointRegionHelperTrait.php106
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}).");
+ }
+ }
+ }
+}