diff options
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php b/vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php new file mode 100644 index 0000000..21ca2c8 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php @@ -0,0 +1,130 @@ +<?php +namespace Aws\Endpoint; + +use JmesPath\Env; + +class PartitionEndpointProvider +{ + /** @var Partition[] */ + private $partitions; + /** @var string */ + private $defaultPartition; + /** @var array */ + private $options; + + /** + * The 'options' parameter accepts the following arguments: + * + * - sts_regional_endpoints: For STS legacy regions, set to 'regional' to + * use regional endpoints, 'legacy' to use the legacy global endpoint. + * Defaults to 'legacy'. + * - s3_us_east_1_regional_endpoint: For S3 us-east-1 region, set to 'regional' + * to use the regional endpoint, 'legacy' to use the legacy global endpoint. + * Defaults to 'legacy'. + * + * @param array $partitions + * @param string $defaultPartition + * @param array $options + */ + public function __construct( + array $partitions, + $defaultPartition = 'aws', + $options = [] + ) { + $this->partitions = array_map(function (array $definition) { + return new Partition($definition); + }, array_values($partitions)); + $this->defaultPartition = $defaultPartition; + $this->options = $options; + } + + public function __invoke(array $args = []) + { + $partition = $this->getPartition( + isset($args['region']) ? $args['region'] : '', + isset($args['service']) ? $args['service'] : '' + ); + $args['options'] = $this->options; + + return $partition($args); + } + + /** + * Returns the partition containing the provided region or the default + * partition if no match is found. + * + * @param string $region + * @param string $service + * + * @return Partition + */ + public function getPartition($region, $service) + { + foreach ($this->partitions as $partition) { + if ($partition->isRegionMatch($region, $service)) { + return $partition; + } + } + + return $this->getPartitionByName($this->defaultPartition); + } + + /** + * Returns the partition with the provided name or null if no partition with + * the provided name can be found. + * + * @param string $name + * + * @return Partition|null + */ + public function getPartitionByName($name) + { + foreach ($this->partitions as $partition) { + if ($name === $partition->getName()) { + return $partition; + } + } + } + + /** + * Creates and returns the default SDK partition provider. + * + * @param array $options + * @return PartitionEndpointProvider + */ + public static function defaultProvider($options = []) + { + $data = \Aws\load_compiled_json(__DIR__ . '/../data/endpoints.json'); + $prefixData = \Aws\load_compiled_json(__DIR__ . '/../data/endpoints_prefix_history.json'); + $mergedData = self::mergePrefixData($data, $prefixData); + + return new self($mergedData['partitions'], 'aws', $options); + } + + /** + * Copy endpoint data for other prefixes used by a given service + * + * @param $data + * @param $prefixData + * @return array + */ + public static function mergePrefixData($data, $prefixData) + { + $prefixGroups = $prefixData['prefix-groups']; + + foreach ($data["partitions"] as $index => $partition) { + foreach ($prefixGroups as $current => $old) { + $serviceData = Env::search("services.\"{$current}\"", $partition); + if (!empty($serviceData)) { + foreach ($old as $prefix) { + if (empty(Env::search("services.\"{$prefix}\"", $partition))) { + $data["partitions"][$index]["services"][$prefix] = $serviceData; + } + } + } + } + } + + return $data; + } +} |