summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php')
-rw-r--r--vendor/aws/aws-sdk-php/src/Endpoint/PartitionEndpointProvider.php130
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;
+ }
+}