/**
  * The multi-region client constructor accepts the following options:
  *
  * - client_factory: (callable) An optional callable that takes an array of
  *   client configuration arguments and returns a regionalized client.
  * - partition: (Aws\Endpoint\Partition|string) AWS partition to connect to.
  *   Valid partitions include "aws," "aws-cn," and "aws-us-gov." Used to
  *   restrict the scope of the mapRegions method.
  * - region: (string) Region to connect to when no override is provided.
  *   Used to create the default client factory and determine the appropriate
  *   AWS partition when present.
  *
  * @param array $args Client configuration arguments.
  */
 public function __construct(array $args = [])
 {
     if (!isset($args['service'])) {
         $args['service'] = $this->parseClass();
     }
     $argDefinitions = static::getArguments();
     $resolver = new ClientResolver($argDefinitions);
     $args = $resolver->resolve($args, new HandlerList());
     $this->config = $args['config'];
     $this->factory = $args['client_factory'];
     $this->partition = $args['partition'];
     $this->args = array_diff_key($args, $args['config']);
 }
Пример #2
0
 /** @internal */
 public static function _applyRetryConfig($value, array &$args)
 {
     if (!$value) {
         return;
     }
     $args['client']->getEmitter()->attach(new RetrySubscriber(ClientResolver::_wrapDebugLogger($args, ['max' => $value, 'delay' => function ($retries) {
         return $retries ? 50 * (int) pow(2, $retries - 1) / 1000 : 0;
     }, 'filter' => RetrySubscriber::createChainFilter([new ThrottlingFilter($args['error_parser']), new Crc32Filter($args['error_parser']), RetrySubscriber::createStatusFilter(), RetrySubscriber::createConnectFilter()])])));
 }
Пример #3
0
 /** @internal */
 public static function _applyApiProvider($value, array &$args, HandlerList $list)
 {
     ClientResolver::_apply_api_provider($value, $args, $list);
     $args['parser'] = new GetBucketLocationParser(new AmbiguousSuccessParser(new RetryableMalformedResponseParser($args['parser'], $args['exception_class']), $args['error_parser'], $args['exception_class']));
 }
Пример #4
0
 /** @internal */
 public static function _applyApiProvider($value, array &$args, HandlerList $list)
 {
     ClientResolver::_apply_api_provider($value, $args, $list);
     $args['parser'] = new GetBucketLocationParser($args['parser']);
 }
 /**
  * The client constructor accepts the following options:
  *
  * - api_provider: (callable) An optional PHP callable that accepts a
  *   type, service, and version argument, and returns an array of
  *   corresponding configuration data. The type value can be one of api,
  *   waiter, or paginator.
  * - credentials:
  *   (Aws\Credentials\CredentialsInterface|array|bool|callable) Specifies
  *   the credentials used to sign requests. Provide an
  *   Aws\Credentials\CredentialsInterface object, an associative array of
  *   "key", "secret", and an optional "token" key, `false` to use null
  *   credentials, or a callable credentials provider used to create
  *   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.
  * - 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
  *   with log messages; stream_size: (int) When the size of a stream is
  *   greater than this number, the stream data will not be logged (set to
  *   "0" to not log any stream data); scrub_auth: (bool) Set to false to
  *   disable the scrubbing of auth data from the logged messages; http:
  *   (bool) Set to false to disable the "debug" feature of lower level HTTP
  *   adapters (e.g., verbose curl output).
  * - stats: (bool|array) Set to true to gather transfer statistics on
  *   requests sent. Alternatively, you can provide an associative array with
  *   the following keys: retries: (bool) Set to false to disable reporting
  *   on retries attempted; http: (bool) Set to true to enable collecting
  *   statistics from lower level HTTP adapters (e.g., values returned in
  *   GuzzleHttp\TransferStats). HTTP handlers must support an
  *   `http_stats_receiver` option for this to have an effect; timer: (bool)
  *   Set to true to enable a command timer that reports the total wall clock
  *   time spent on an operation in seconds.
  * - 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_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
  *   is required. See Aws\Endpoint\EndpointProvider for a list of built-in
  *   providers.
  * - handler: (callable) A handler that accepts a command object,
  *   request object and returns a promise that is fulfilled with an
  *   Aws\ResultInterface object or rejected with an
  *   Aws\Exception\AwsException. A handler does not accept a next handler
  *   as it is terminal and expected to fulfill a command. If no handler is
  *   provided, a default Guzzle handler will be utilized.
  * - http: (array, default=array(0)) Set to an array of SDK request
  *   options to apply to each request (e.g., proxy, verify, etc.).
  * - http_handler: (callable) An HTTP handler is a function that
  *   accepts a PSR-7 request object and returns a promise that is fulfilled
  *   with a PSR-7 response object or rejected with an array of exception
  *   data. NOTE: This option supersedes any provided "handler" option.
  * - profile: (string) Allows you to specify which profile to use when
  *   credentials are created from the AWS credentials file in your HOME
  *   directory. This setting overrides the AWS_PROFILE environment
  *   variable. Note: Specifying "profile" will cause the "credentials" key
  *   to be ignored.
  * - 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).
  * - 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
  *   a service over an unencrypted "http" endpoint by setting ``scheme`` to
  *   "http".
  * - signature_provider: (callable) A callable that accepts a signature
  *   version name (e.g., "v4"), a service name, and region, and
  *   returns a SignatureInterface object or null. This provider is used to
  *   create signers utilized by the client. See
  *   Aws\Signature\SignatureProvider for a list of built-in providers
  * - signature_version: (string) A string representing a custom
  *   signature version to use with a service (e.g., v4). Note that
  *   per/operation signature version MAY override this requested signature
  *   version.
  * - validate: (bool, default=bool(true)) Set to false to disable
  *   client-side parameter validation.
  * - version: (string, required) The version of the webservice to
  *   utilize (e.g., 2006-03-01).
  *
  * @param array $args Client configuration arguments.
  *
  * @throws \InvalidArgumentException if any required options are missing or
  *                                   the service is not supported.
  */
 public function __construct(array $args)
 {
     list($service, $exceptionClass) = $this->parseClass();
     if (!isset($args['service'])) {
         $args['service'] = manifest($service)['endpoint'];
     }
     if (!isset($args['exception_class'])) {
         $args['exception_class'] = $exceptionClass;
     }
     $this->handlerList = new HandlerList();
     $resolver = new ClientResolver(static::getArguments());
     $config = $resolver->resolve($args, $this->handlerList);
     $this->api = $config['api'];
     $this->signatureProvider = $config['signature_provider'];
     $this->endpoint = new Uri($config['endpoint']);
     $this->credentialProvider = $config['credentials'];
     $this->region = isset($config['region']) ? $config['region'] : null;
     $this->config = $config['config'];
     $this->defaultRequestOptions = $config['http'];
     $this->addSignatureMiddleware();
     $this->addInvocationId();
     if (isset($args['with_resolved'])) {
         $args['with_resolved']($config);
     }
 }
 /** @internal */
 public static function _applyApiProvider($value, array &$args, HandlerList $list)
 {
     ClientResolver::_apply_api_provider($value, $args, $list);
     $args['parser'] = new Crc32ValidatingParser($args['parser']);
 }
Пример #7
0
 /**
  * The client constructor accepts the following options:
  *
  * - api_provider: (callable) An optional PHP callable that accepts a
  *   type, service, and version argument, and returns an array of
  *   corresponding configuration data. The type value can be one of api,
  *   waiter, or paginator.
  * - client: (GuzzleHttp\ClientInterface) Optional Guzzle client used to
  *   transfer requests over the wire. If you do not specify a client, the
  *   SDK will create a new client that uses a shared Ring HTTP handler
  *   with other clients.
  * - credentials:
  *   (array|Aws\Credentials\CredentialsInterface|bool|callable) An
  *   Aws\Credentials\CredentialsInterface object to use with each, an
  *   associative array of "key", "secret", and "token" key value pairs,
  *   `false` to utilize null credentials, or a callable credentials
  *   provider function to create credentials using a function. If no
  *   credentials are provided, the SDK will attempt to load them from the
  *   environment.
  * - debug: (bool|resource) Set to true to display debug information
  *   when sending requests. Provide a stream resource to write debug
  *   information to a specific resource.
  * - 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_provider: (callable) An optional PHP callable that
  *   accepts a hash of options including a service and region key and
  *   returns a hash of endpoint data, of which the endpoint key is
  *   required.
  * - http: (array) Set to an array of Guzzle client request options
  *   (e.g., proxy, verify, etc.). See
  *   http://docs.guzzlephp.org/en/latest/clients.html#request-options for a
  *   list of available options.
  * - profile: (string) Allows you to specify which profile to use when
  *   credentials are created from the AWS credentials file in your HOME
  *   directory. This setting overrides the AWS_PROFILE environment
  *   variable. Note: Specifying "profile" will cause the "credentials" key
  *   to be ignored.
  * - 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).
  * - retry_logger: (string|Psr\Log\LoggerInterface) When the string "debug"
  *   is provided, all retries will be logged to STDOUT. Provide a PSR-3
  *   logger to log retries to a specific logger instance.
  * - ringphp_handler: (callable) RingPHP handler used to transfer HTTP
  *   requests (see http://ringphp.readthedocs.org/en/latest/).
  * - scheme: (string, default=string(5) "https") URI scheme to use when
  *   connecting connect.
  * - service: (string, required) Name of the service to utilize. This
  *   value will be supplied by default.
  * - signature_provider: (callable) A callable that accepts a signature
  *   version name (e.g., v4, s3), a service name, and region, and returns a
  *   SignatureInterface object. This provider is used to create signers
  *   utilized by the client.
  * - signature_version: (string) A string representing a custom
  *   signature version to use with a service (e.g., v4, s3, v2). Note that
  *   per/operation signature version MAY override this requested signature
  *   version.
  * - validate: (bool, default=bool(true)) Set to false to disable
  *   client-side parameter validation.
  * - version: (string, required) The version of the webservice to
  *   utilize (e.g., 2006-03-01).
  *
  * @param array $args Client configuration arguments.
  *
  * @throws \InvalidArgumentException if any required options are missing
  */
 public function __construct(array $args)
 {
     $service = $this->parseClass();
     $withResolved = null;
     if (!isset($args['service'])) {
         $args['service'] = $service;
     }
     $resolver = new ClientResolver(static::getArguments());
     $config = $resolver->resolve($args, $this->getEmitter());
     $this->api = $config['api'];
     $this->serializer = $config['serializer'];
     $this->errorParser = $config['error_parser'];
     $this->signatureProvider = $config['signature_provider'];
     $this->endpoint = $config['endpoint'];
     $this->credentials = $config['credentials'];
     $this->region = isset($config['region']) ? $config['region'] : null;
     $this->applyParser();
     $this->initSigners($config['config']['signature_version']);
     parent::__construct($config['client'], $config['config']);
     // Make sure the user agent is prefixed by the SDK version.
     $client = $this->getHttpClient();
     $client->setDefaultOption('allow_redirects', false);
     $client->setDefaultOption('headers/User-Agent', 'aws-sdk-php/' . Sdk::VERSION . ' ' . Client::getDefaultUserAgent());
     if (isset($args['with_resolved'])) {
         /** @var callable $withResolved */
         $args['with_resolved']($config);
     }
 }
Пример #8
0
 private static function applyApiProvider()
 {
     return function ($value, &$args) {
         ClientResolver::_apply_api_provider($value, $args);
         $parser = function (ResponseInterface $response) use($args) {
             // Call the original parser.
             $errorData = $args['error_parser']($response);
             // Handle 404 responses where the code was not parsed.
             if (!isset($errorData['code']) && $response->getStatusCode() == 404) {
                 $url = (new S3UriParser())->parse($response->getEffectiveUrl());
                 if (isset($url['key'])) {
                     $errorData['code'] = 'NoSuchKey';
                 } elseif ($url['bucket']) {
                     $errorData['code'] = 'NoSuchBucket';
                 }
             }
             return $errorData;
         };
         $args['error_parser'] = $parser;
     };
 }