updated-packages
This commit is contained in:
307
vendor/aws/aws-sdk-php/src/AwsClient.php
vendored
307
vendor/aws/aws-sdk-php/src/AwsClient.php
vendored
@@ -7,6 +7,8 @@ use Aws\Api\Service;
|
||||
use Aws\ClientSideMonitoring\ApiCallAttemptMonitoringMiddleware;
|
||||
use Aws\ClientSideMonitoring\ApiCallMonitoringMiddleware;
|
||||
use Aws\ClientSideMonitoring\ConfigurationProvider;
|
||||
use Aws\EndpointDiscovery\EndpointDiscoveryMiddleware;
|
||||
use Aws\EndpointV2\EndpointProviderV2;
|
||||
use Aws\Signature\SignatureProvider;
|
||||
use GuzzleHttp\Psr7\Uri;
|
||||
|
||||
@@ -17,6 +19,9 @@ class AwsClient implements AwsClientInterface
|
||||
{
|
||||
use AwsClientTrait;
|
||||
|
||||
/** @var array */
|
||||
private $aliases;
|
||||
|
||||
/** @var array */
|
||||
private $config;
|
||||
|
||||
@@ -35,12 +40,27 @@ class AwsClient implements AwsClientInterface
|
||||
/** @var callable */
|
||||
private $credentialProvider;
|
||||
|
||||
/** @var callable */
|
||||
private $tokenProvider;
|
||||
|
||||
/** @var HandlerList */
|
||||
private $handlerList;
|
||||
|
||||
/** @var array*/
|
||||
private $defaultRequestOptions;
|
||||
|
||||
/** @var array*/
|
||||
private $clientContextParams = [];
|
||||
|
||||
/** @var array*/
|
||||
protected $clientBuiltIns = [];
|
||||
|
||||
/** @var EndpointProviderV2 | callable */
|
||||
protected $endpointProvider;
|
||||
|
||||
/** @var callable */
|
||||
protected $serializer;
|
||||
|
||||
/**
|
||||
* Get an array of client constructor arguments used by the client.
|
||||
*
|
||||
@@ -67,6 +87,25 @@ class AwsClient implements AwsClientInterface
|
||||
* credentials or return null. See Aws\Credentials\CredentialProvider for
|
||||
* a list of built-in credentials providers. If no credentials are
|
||||
* provided, the SDK will attempt to load them from the environment.
|
||||
* - token:
|
||||
* (Aws\Token\TokenInterface|array|bool|callable) Specifies
|
||||
* the token used to authorize requests. Provide an
|
||||
* Aws\Token\TokenInterface object, an associative array of
|
||||
* "token" and an optional "expires" key, `false` to use no
|
||||
* token, or a callable token provider used to create a
|
||||
* token or return null. See Aws\Token\TokenProvider for
|
||||
* a list of built-in token providers. If no token is
|
||||
* provided, the SDK will attempt to load one from the environment.
|
||||
* - csm:
|
||||
* (Aws\ClientSideMonitoring\ConfigurationInterface|array|callable) Specifies
|
||||
* the credentials used to sign requests. Provide an
|
||||
* Aws\ClientSideMonitoring\ConfigurationInterface object, a callable
|
||||
* configuration provider used to create client-side monitoring configuration,
|
||||
* `false` to disable csm, or an associative array with the following keys:
|
||||
* enabled: (bool) Set to true to enable client-side monitoring, defaults
|
||||
* to false; host: (string) the host location to send monitoring events to,
|
||||
* defaults to 127.0.0.1; port: (int) The port used for the host connection,
|
||||
* defaults to 31000; client_id: (string) An identifier for this project
|
||||
* - debug: (bool|array) Set to true to display debug information when
|
||||
* sending requests. Alternatively, you can provide an associative array
|
||||
* with the following keys: logfn: (callable) Function that is invoked
|
||||
@@ -93,6 +132,14 @@ class AwsClient implements AwsClientInterface
|
||||
* - endpoint: (string) The full URI of the webservice. This is only
|
||||
* required when connecting to a custom endpoint (e.g., a local version
|
||||
* of S3).
|
||||
* - endpoint_discovery: (Aws\EndpointDiscovery\ConfigurationInterface,
|
||||
* Aws\CacheInterface, array, callable) Settings for endpoint discovery.
|
||||
* Provide an instance of Aws\EndpointDiscovery\ConfigurationInterface,
|
||||
* an instance Aws\CacheInterface, a callable that provides a promise for
|
||||
* a Configuration object, or an associative array with the following
|
||||
* keys: enabled: (bool) Set to true to enable endpoint discovery, false
|
||||
* to explicitly disable it, defaults to false; cache_limit: (int) The
|
||||
* maximum number of keys in the endpoints cache, defaults to 1000.
|
||||
* - endpoint_provider: (callable) An optional PHP callable that
|
||||
* accepts a hash of options including a "service" and "region" key and
|
||||
* returns NULL or a hash of endpoint data, of which the "endpoint" key
|
||||
@@ -125,8 +172,16 @@ class AwsClient implements AwsClientInterface
|
||||
* - region: (string, required) Region to connect to. See
|
||||
* http://docs.aws.amazon.com/general/latest/gr/rande.html for a list of
|
||||
* available regions.
|
||||
* - retries: (int, default=int(3)) Configures the maximum number of
|
||||
* allowed retries for a client (pass 0 to disable retries).
|
||||
* - retries: (int, Aws\Retry\ConfigurationInterface, Aws\CacheInterface,
|
||||
* array, callable) Configures the retry mode and maximum number of
|
||||
* allowed retries for a client (pass 0 to disable retries). Provide an
|
||||
* integer for 'legacy' mode with the specified number of retries.
|
||||
* Otherwise provide an instance of Aws\Retry\ConfigurationInterface, an
|
||||
* instance of Aws\CacheInterface, a callable function, or an array with
|
||||
* the following keys: mode: (string) Set to 'legacy', 'standard' (uses
|
||||
* retry quota management), or 'adapative' (an experimental mode that adds
|
||||
* client-side rate limiting to standard mode); max_attempts (int) The
|
||||
* maximum number of attempts for a given request.
|
||||
* - scheme: (string, default=string(5) "https") URI scheme to use when
|
||||
* connecting connect. The SDK will utilize "https" endpoints (i.e.,
|
||||
* utilize SSL/TLS connections) by default. You can attempt to connect to
|
||||
@@ -141,6 +196,10 @@ class AwsClient implements AwsClientInterface
|
||||
* signature version to use with a service (e.g., v4). Note that
|
||||
* per/operation signature version MAY override this requested signature
|
||||
* version.
|
||||
* - use_aws_shared_config_files: (bool, default=bool(true)) Set to false to
|
||||
* disable checking for shared config file in '~/.aws/config' and
|
||||
* '~/.aws/credentials'. This will override the AWS_CONFIG_FILE
|
||||
* environment variable.
|
||||
* - validate: (bool, default=bool(true)) Set to false to disable
|
||||
* client-side parameter validation.
|
||||
* - version: (string, required) The version of the webservice to
|
||||
@@ -160,7 +219,6 @@ class AwsClient implements AwsClientInterface
|
||||
if (!isset($args['exception_class'])) {
|
||||
$args['exception_class'] = $exceptionClass;
|
||||
}
|
||||
|
||||
$this->handlerList = new HandlerList();
|
||||
$resolver = new ClientResolver(static::getArguments());
|
||||
$config = $resolver->resolve($args, $this->handlerList);
|
||||
@@ -168,13 +226,22 @@ class AwsClient implements AwsClientInterface
|
||||
$this->signatureProvider = $config['signature_provider'];
|
||||
$this->endpoint = new Uri($config['endpoint']);
|
||||
$this->credentialProvider = $config['credentials'];
|
||||
$this->tokenProvider = $config['token'];
|
||||
$this->region = isset($config['region']) ? $config['region'] : null;
|
||||
$this->config = $config['config'];
|
||||
$this->setClientBuiltIns($args);
|
||||
$this->clientContextParams = $this->setClientContextParams($args);
|
||||
$this->defaultRequestOptions = $config['http'];
|
||||
$this->endpointProvider = $config['endpoint_provider'];
|
||||
$this->serializer = $config['serializer'];
|
||||
$this->addSignatureMiddleware();
|
||||
$this->addInvocationId();
|
||||
$this->addClientSideMonitoring($args);
|
||||
$this->addEndpointParameterMiddleware($args);
|
||||
$this->addEndpointDiscoveryMiddleware($config, $args);
|
||||
$this->loadAliases();
|
||||
$this->addStreamRequestPayload();
|
||||
$this->addRecursionDetection();
|
||||
$this->addRequestBuilder();
|
||||
|
||||
if (isset($args['with_resolved'])) {
|
||||
$args['with_resolved']($config);
|
||||
@@ -201,6 +268,7 @@ class AwsClient implements AwsClientInterface
|
||||
return $fn();
|
||||
}
|
||||
|
||||
|
||||
public function getEndpoint()
|
||||
{
|
||||
return $this->endpoint;
|
||||
@@ -235,6 +303,33 @@ class AwsClient implements AwsClientInterface
|
||||
return new Command($name, $args, clone $this->getHandlerList());
|
||||
}
|
||||
|
||||
public function getEndpointProvider()
|
||||
{
|
||||
return $this->endpointProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the set of service context parameter
|
||||
* key-value pairs used for endpoint resolution.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getClientContextParams()
|
||||
{
|
||||
return $this->clientContextParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the set of built-in keys and values
|
||||
* used for endpoint resolution
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getClientBuiltIns()
|
||||
{
|
||||
return $this->clientBuiltIns;
|
||||
}
|
||||
|
||||
public function __sleep()
|
||||
{
|
||||
throw new \RuntimeException('Instances of ' . static::class
|
||||
@@ -246,7 +341,7 @@ class AwsClient implements AwsClientInterface
|
||||
*
|
||||
* @return callable
|
||||
*/
|
||||
final protected function getSignatureProvider()
|
||||
final public function getSignatureProvider()
|
||||
{
|
||||
return $this->signatureProvider;
|
||||
}
|
||||
@@ -286,6 +381,22 @@ class AwsClient implements AwsClientInterface
|
||||
}
|
||||
}
|
||||
|
||||
private function addEndpointDiscoveryMiddleware($config, $args)
|
||||
{
|
||||
$list = $this->getHandlerList();
|
||||
|
||||
if (!isset($args['endpoint'])) {
|
||||
$list->appendBuild(
|
||||
EndpointDiscoveryMiddleware::wrap(
|
||||
$this,
|
||||
$args,
|
||||
$config['endpoint_discovery']
|
||||
),
|
||||
'EndpointDiscoveryMiddleware'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function addSignatureMiddleware()
|
||||
{
|
||||
$api = $this->getApi();
|
||||
@@ -297,6 +408,13 @@ class AwsClient implements AwsClientInterface
|
||||
$resolver = static function (
|
||||
CommandInterface $c
|
||||
) use ($api, $provider, $name, $region, $version) {
|
||||
if (!empty($c['@context']['signing_region'])) {
|
||||
$region = $c['@context']['signing_region'];
|
||||
}
|
||||
if (!empty($c['@context']['signing_service'])) {
|
||||
$name = $c['@context']['signing_service'];
|
||||
}
|
||||
|
||||
$authType = $api->getOperation($c->getName())['authtype'];
|
||||
switch ($authType){
|
||||
case 'none':
|
||||
@@ -305,11 +423,26 @@ class AwsClient implements AwsClientInterface
|
||||
case 'v4-unsigned-body':
|
||||
$version = 'v4-unsigned-body';
|
||||
break;
|
||||
case 'bearer':
|
||||
$version = 'bearer';
|
||||
break;
|
||||
}
|
||||
if (isset($c['@context']['signature_version'])) {
|
||||
if ($c['@context']['signature_version'] == 'v4a') {
|
||||
$version = 'v4a';
|
||||
}
|
||||
}
|
||||
if (!empty($endpointAuthSchemes = $c->getAuthSchemes())) {
|
||||
$version = $endpointAuthSchemes['version'];
|
||||
$name = isset($endpointAuthSchemes['name']) ?
|
||||
$endpointAuthSchemes['name'] : $name;
|
||||
$region = isset($endpointAuthSchemes['region']) ?
|
||||
$endpointAuthSchemes['region'] : $region;
|
||||
}
|
||||
return SignatureProvider::resolve($provider, $version, $name, $region);
|
||||
};
|
||||
$this->handlerList->appendSign(
|
||||
Middleware::signer($this->credentialProvider, $resolver),
|
||||
Middleware::signer($this->credentialProvider, $resolver, $this->tokenProvider),
|
||||
'signer'
|
||||
);
|
||||
}
|
||||
@@ -320,32 +453,144 @@ class AwsClient implements AwsClientInterface
|
||||
$this->handlerList->prependSign(Middleware::invocationId(), 'invocation-id');
|
||||
}
|
||||
|
||||
private function addClientSideMonitoring($args)
|
||||
private function loadAliases($file = null)
|
||||
{
|
||||
$options = ConfigurationProvider::defaultProvider($args);
|
||||
if (!isset($this->aliases)) {
|
||||
if (is_null($file)) {
|
||||
$file = __DIR__ . '/data/aliases.json';
|
||||
}
|
||||
$aliases = \Aws\load_compiled_json($file);
|
||||
$serviceId = $this->api->getServiceId();
|
||||
$version = $this->getApi()->getApiVersion();
|
||||
if (!empty($aliases['operations'][$serviceId][$version])) {
|
||||
$this->aliases = array_flip($aliases['operations'][$serviceId][$version]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function addStreamRequestPayload()
|
||||
{
|
||||
$streamRequestPayloadMiddleware = StreamRequestPayloadMiddleware::wrap(
|
||||
$this->api
|
||||
);
|
||||
|
||||
$this->handlerList->prependSign(
|
||||
$streamRequestPayloadMiddleware,
|
||||
'StreamRequestPayloadMiddleware'
|
||||
);
|
||||
}
|
||||
|
||||
private function addRecursionDetection()
|
||||
{
|
||||
// Add recursion detection header to requests
|
||||
// originating in supported Lambda runtimes
|
||||
$this->handlerList->appendBuild(
|
||||
ApiCallMonitoringMiddleware::wrap(
|
||||
$this->credentialProvider,
|
||||
$options,
|
||||
$this->region,
|
||||
$this->getApi()->getServiceId()
|
||||
),
|
||||
'ApiCallMonitoringMiddleware'
|
||||
Middleware::recursionDetection(), 'recursion-detection'
|
||||
);
|
||||
}
|
||||
|
||||
$callAttemptMiddleware = ApiCallAttemptMonitoringMiddleware::wrap(
|
||||
$this->credentialProvider,
|
||||
$options,
|
||||
$this->region,
|
||||
$this->getApi()->getServiceId()
|
||||
);
|
||||
$this->handlerList->appendAttempt (
|
||||
$callAttemptMiddleware,
|
||||
'ApiCallAttemptMonitoringMiddleware'
|
||||
/**
|
||||
* Adds the `builder` middleware such that a client's endpoint
|
||||
* provider and endpoint resolution arguments can be passed.
|
||||
*/
|
||||
private function addRequestBuilder()
|
||||
{
|
||||
$handlerList = $this->getHandlerList();
|
||||
$serializer = $this->serializer;
|
||||
$endpointProvider = $this->endpointProvider;
|
||||
$endpointArgs = $this->getEndpointProviderArgs();
|
||||
|
||||
$handlerList->prependBuild(
|
||||
Middleware::requestBuilder(
|
||||
$serializer,
|
||||
$endpointProvider,
|
||||
$endpointArgs
|
||||
),
|
||||
'builderV2'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves client context param definition from service model,
|
||||
* creates mapping of client context param names with client-provided
|
||||
* values.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function setClientContextParams($args)
|
||||
{
|
||||
$api = $this->getApi();
|
||||
$resolvedParams = [];
|
||||
if (!empty($paramDefinitions = $api->getClientContextParams())) {
|
||||
foreach($paramDefinitions as $paramName => $paramValue) {
|
||||
if (isset($args[$paramName])) {
|
||||
$result[$paramName] = $args[$paramName];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $resolvedParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves and sets default values used for endpoint resolution.
|
||||
*/
|
||||
private function setClientBuiltIns($args)
|
||||
{
|
||||
$builtIns = [];
|
||||
$config = $this->getConfig();
|
||||
$service = $args['service'];
|
||||
|
||||
$builtIns['SDK::Endpoint'] = isset($args['endpoint']) ? $args['endpoint'] : null;
|
||||
$builtIns['AWS::Region'] = $this->getRegion();
|
||||
$builtIns['AWS::UseFIPS'] = $config['use_fips_endpoint']->isUseFipsEndpoint();
|
||||
$builtIns['AWS::UseDualStack'] = $config['use_dual_stack_endpoint']->isUseDualstackEndpoint();
|
||||
if ($service === 's3' || $service === 's3control'){
|
||||
$builtIns['AWS::S3::UseArnRegion'] = $config['use_arn_region']->isUseArnRegion();
|
||||
}
|
||||
if ($service === 's3') {
|
||||
$builtIns['AWS::S3::UseArnRegion'] = $config['use_arn_region']->isUseArnRegion();
|
||||
$builtIns['AWS::S3::Accelerate'] = $config['use_accelerate_endpoint'];
|
||||
$builtIns['AWS::S3::ForcePathStyle'] = $config['use_path_style_endpoint'];
|
||||
$builtIns['AWS::S3::DisableMultiRegionAccessPoints'] = $config['disable_multiregion_access_points'];
|
||||
}
|
||||
$this->clientBuiltIns += $builtIns;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves arguments to be used in endpoint resolution.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getEndpointProviderArgs()
|
||||
{
|
||||
return $this->normalizeEndpointProviderArgs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Combines built-in and client context parameter values in
|
||||
* order of specificity. Client context parameter values supersede
|
||||
* built-in values.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function normalizeEndpointProviderArgs()
|
||||
{
|
||||
$normalizedBuiltIns = [];
|
||||
|
||||
foreach($this->clientBuiltIns as $name => $value) {
|
||||
$normalizedName = explode('::', $name);
|
||||
$normalizedName = $normalizedName[count($normalizedName) - 1];
|
||||
$normalizedBuiltIns[$normalizedName] = $value;
|
||||
}
|
||||
|
||||
return array_merge($normalizedBuiltIns, $this->getClientContextParams());
|
||||
}
|
||||
|
||||
protected function isUseEndpointV2()
|
||||
{
|
||||
return $this->endpointProvider instanceof EndpointProviderV2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a service model and doc model with any necessary changes
|
||||
* applied.
|
||||
@@ -360,6 +605,20 @@ class AwsClient implements AwsClientInterface
|
||||
*/
|
||||
public static function applyDocFilters(array $api, array $docs)
|
||||
{
|
||||
$aliases = \Aws\load_compiled_json(__DIR__ . '/data/aliases.json');
|
||||
$serviceId = $api['metadata']['serviceId'];
|
||||
$version = $api['metadata']['apiVersion'];
|
||||
|
||||
// Replace names for any operations with SDK aliases
|
||||
if (!empty($aliases['operations'][$serviceId][$version])) {
|
||||
foreach ($aliases['operations'][$serviceId][$version] as $op => $alias) {
|
||||
$api['operations'][$alias] = $api['operations'][$op];
|
||||
$docs['operations'][$alias] = $docs['operations'][$op];
|
||||
unset($api['operations'][$op], $docs['operations'][$op]);
|
||||
}
|
||||
}
|
||||
ksort($api['operations']);
|
||||
|
||||
return [
|
||||
new Service($api, ApiProvider::defaultProvider()),
|
||||
new DocModel($docs)
|
||||
|
Reference in New Issue
Block a user