From 0c8af4992cb0f7589dcafaad65ada12753c64594 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 23 Nov 2022 21:14:33 +0300 Subject: initial --- .../aws-sdk-php/src/Sts/Exception/StsException.php | 9 + .../src/Sts/RegionalEndpoints/Configuration.php | 42 +++++ .../RegionalEndpoints/ConfigurationInterface.php | 22 +++ .../RegionalEndpoints/ConfigurationProvider.php | 202 +++++++++++++++++++++ .../Exception/ConfigurationException.php | 14 ++ vendor/aws/aws-sdk-php/src/Sts/StsClient.php | 119 ++++++++++++ 6 files changed, 408 insertions(+) create mode 100644 vendor/aws/aws-sdk-php/src/Sts/Exception/StsException.php create mode 100644 vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Configuration.php create mode 100644 vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationInterface.php create mode 100644 vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationProvider.php create mode 100644 vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Exception/ConfigurationException.php create mode 100644 vendor/aws/aws-sdk-php/src/Sts/StsClient.php (limited to 'vendor/aws/aws-sdk-php/src/Sts') diff --git a/vendor/aws/aws-sdk-php/src/Sts/Exception/StsException.php b/vendor/aws/aws-sdk-php/src/Sts/Exception/StsException.php new file mode 100644 index 0000000..81cff40 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Sts/Exception/StsException.php @@ -0,0 +1,9 @@ +endpointsType = strtolower($endpointsType); + $this->isFallback = $isFallback; + if (!in_array($this->endpointsType, ['legacy', 'regional'])) { + throw new \InvalidArgumentException( + "Configuration parameter must either be 'legacy' or 'regional'." + ); + } + } + + /** + * {@inheritdoc} + */ + public function getEndpointsType() + { + return $this->endpointsType; + } + + /** + * {@inheritdoc} + */ + public function toArray() + { + return [ + 'endpoints_type' => $this->getEndpointsType() + ]; + } + + public function isFallback() + { + return $this->isFallback; + } +} diff --git a/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationInterface.php b/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationInterface.php new file mode 100644 index 0000000..41d543b --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/ConfigurationInterface.php @@ -0,0 +1,22 @@ + + * use Aws\Sts\RegionalEndpoints\ConfigurationProvider; + * $provider = ConfigurationProvider::defaultProvider(); + * // Returns a ConfigurationInterface or throws. + * $config = $provider()->wait(); + * + * + * Configuration providers can be composed to create configuration using + * conditional logic that can create different configurations in different + * environments. You can compose multiple providers into a single provider using + * {@see \Aws\Sts\RegionalEndpoints\ConfigurationProvider::chain}. This function + * accepts providers as variadic arguments and returns a new function that will + * invoke each provider until a successful configuration is returned. + * + * + * // First try an INI file at this location. + * $a = ConfigurationProvider::ini(null, '/path/to/file.ini'); + * // Then try an INI file at this location. + * $b = ConfigurationProvider::ini(null, '/path/to/other-file.ini'); + * // Then try loading from environment variables. + * $c = ConfigurationProvider::env(); + * // Combine the three providers together. + * $composed = ConfigurationProvider::chain($a, $b, $c); + * // Returns a promise that is fulfilled with a configuration or throws. + * $promise = $composed(); + * // Wait on the configuration to resolve. + * $config = $promise->wait(); + * + */ +class ConfigurationProvider extends AbstractConfigurationProvider + implements ConfigurationProviderInterface +{ + const DEFAULT_ENDPOINTS_TYPE = 'legacy'; + const ENV_ENDPOINTS_TYPE = 'AWS_STS_REGIONAL_ENDPOINTS'; + const ENV_PROFILE = 'AWS_PROFILE'; + const INI_ENDPOINTS_TYPE = 'sts_regional_endpoints'; + + public static $cacheKey = 'aws_sts_regional_endpoints_config'; + + protected static $interfaceClass = ConfigurationInterface::class; + protected static $exceptionClass = ConfigurationException::class; + + /** + * Create a default config provider that first checks for environment + * variables, then checks for a specified profile in the environment-defined + * config file location (env variable is 'AWS_CONFIG_FILE', file location + * defaults to ~/.aws/config), then checks for the "default" profile in the + * environment-defined config file location, and failing those uses a default + * fallback set of configuration options. + * + * This provider is automatically wrapped in a memoize function that caches + * previously provided config options. + * + * @param array $config + * + * @return callable + */ + public static function defaultProvider(array $config = []) + { + $configProviders = [self::env()]; + if ( + !isset($config['use_aws_shared_config_files']) + || $config['use_aws_shared_config_files'] != false + ) { + $configProviders[] = self::ini(); + } + $configProviders[] = self::fallback(); + + $memo = self::memoize( + call_user_func_array([ConfigurationProvider::class, 'chain'], $configProviders) + ); + + if (isset($config['sts_regional_endpoints']) + && $config['sts_regional_endpoints'] instanceof CacheInterface + ) { + return self::cache($memo, $config['sts_regional_endpoints'], self::$cacheKey); + } + + return $memo; + } + + /** + * Provider that creates config from environment variables. + * + * @return callable + */ + public static function env() + { + return function () { + // Use config from environment variables, if available + $endpointsType = getenv(self::ENV_ENDPOINTS_TYPE); + if (!empty($endpointsType)) { + return Promise\Create::promiseFor( + new Configuration($endpointsType) + ); + } + + return self::reject('Could not find environment variable config' + . ' in ' . self::ENV_ENDPOINTS_TYPE); + }; + } + + /** + * Fallback config options when other sources are not set. + * + * @return callable + */ + public static function fallback() + { + return function () { + return Promise\Create::promiseFor( + new Configuration(self::DEFAULT_ENDPOINTS_TYPE, true) + ); + }; + } + + /** + * Config provider that creates config using a config file whose location + * is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to + * ~/.aws/config if not specified + * + * @param string|null $profile Profile to use. If not specified will use + * the "default" profile. + * @param string|null $filename If provided, uses a custom filename rather + * than looking in the default directory. + * + * @return callable + */ + public static function ini( + $profile = null, + $filename = null + ) { + $filename = $filename ?: (self::getDefaultConfigFilename()); + $profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default'); + + return function () use ($profile, $filename) { + if (!@is_readable($filename)) { + return self::reject("Cannot read configuration from $filename"); + } + $data = \Aws\parse_ini_file($filename, true); + if ($data === false) { + return self::reject("Invalid config file: $filename"); + } + if (!isset($data[$profile])) { + return self::reject("'$profile' not found in config file"); + } + if (!isset($data[$profile][self::INI_ENDPOINTS_TYPE])) { + return self::reject("Required STS regional endpoints config values + not present in INI profile '{$profile}' ({$filename})"); + } + + return Promise\Create::promiseFor( + new Configuration($data[$profile][self::INI_ENDPOINTS_TYPE]) + ); + }; + } + + /** + * Unwraps a configuration object in whatever valid form it is in, + * always returning a ConfigurationInterface object. + * + * @param mixed $config + * @return ConfigurationInterface + * @throws \InvalidArgumentException + */ + public static function unwrap($config) + { + if (is_callable($config)) { + $config = $config(); + } + if ($config instanceof PromiseInterface) { + $config = $config->wait(); + } + if ($config instanceof ConfigurationInterface) { + return $config; + } + if (is_string($config)) { + return new Configuration($config); + } + if (is_array($config) && isset($config['endpoints_type'])) { + return new Configuration($config['endpoints_type']); + } + + throw new \InvalidArgumentException('Not a valid STS regional endpoints ' + . 'configuration argument.'); + } +} diff --git a/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Exception/ConfigurationException.php b/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Exception/ConfigurationException.php new file mode 100644 index 0000000..6684266 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Sts/RegionalEndpoints/Exception/ConfigurationException.php @@ -0,0 +1,14 @@ +addBuiltIns($args); + parent::__construct($args); + } + + /** + * Creates credentials from the result of an STS operations + * + * @param Result $result Result of an STS operation + * + * @return Credentials + * @throws \InvalidArgumentException if the result contains no credentials + */ + public function createCredentials(Result $result) + { + if (!$result->hasKey('Credentials')) { + throw new \InvalidArgumentException('Result contains no credentials'); + } + + $c = $result['Credentials']; + + return new Credentials( + $c['AccessKeyId'], + $c['SecretAccessKey'], + isset($c['SessionToken']) ? $c['SessionToken'] : null, + isset($c['Expiration']) && $c['Expiration'] instanceof \DateTimeInterface + ? (int) $c['Expiration']->format('U') + : null + ); + } + + /** + * Adds service-specific client built-in value + * + * @return void + */ + private function addBuiltIns($args) + { + $key = 'AWS::STS::UseGlobalEndpoint'; + $result = $args['sts_regional_endpoints'] instanceof \Closure ? + $args['sts_regional_endpoints']()->wait() : $args['sts_regional_endpoints']; + + if (is_string($result)) { + if ($result === 'regional') { + $value = false; + } else if ($result === 'legacy') { + $value = true; + } else { + return; + } + } else { + if ($result->getEndpointsType() === 'regional') { + $value = false; + } else { + $value = true; + } + } + + $this->clientBuiltIns[$key] = $value; + } +} -- cgit v1.2.3