Viewing file: EndpointV2SerializerTrait.php (7.62 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Aws\EndpointV2;
use Aws\Api\Serializer\RestSerializer; use GuzzleHttp\Psr7\Uri;
/** * Set of helper functions used to set endpoints and endpoint * properties derived from dynamic endpoint resolution. * * @internal */ trait EndpointV2SerializerTrait { /** * Merges endpoint resolution arguments passed from the client * and command and attempts to resolve an endpoint. Headers and * auth schemes may be returned in a resolved endpoint object. * A resolved endpoint uri and headers will be applied to the request. * Auth schemes are applied to the command and compared against the default * auth scheme at signing. * * @internal */ private function setRequestOptions( $endpointProvider, $command, $operation, $commandArgs, $clientArgs, &$headers ) { $providerArgs = $this->resolveProviderArgs( $endpointProvider, $operation, $commandArgs, $clientArgs ); $endpoint = $endpointProvider->resolveEndpoint($providerArgs); $resolvedUrl = $endpoint->getUrl();
$this->applyScheme($resolvedUrl); $this->endpoint = $resolvedUrl; $this->applyAuthSchemeToCommand($endpoint, $command); $this->applyHeaders($endpoint, $headers); }
private function resolveProviderArgs( $endpointProvider, $operation, $commandArgs, $clientArgs ) { $rulesetParams = $endpointProvider->getRuleset()->getParameters(); $endpointCommandArgs = $this->filterEndpointCommandArgs( $rulesetParams, $commandArgs ); $staticContextParams = $this->bindStaticContextParams( $operation->getStaticContextParams() ); $contextParams = $this->bindContextParams( $commandArgs, $operation->getContextParams() ); $providerArgs = $this->normalizeEndpointProviderArgs( $endpointCommandArgs, $clientArgs, $contextParams, $staticContextParams );
return $providerArgs; }
/** * Merges endpoint provider arguments from different sources. * Client built-ins are superseded by client context params. * Client context params are superseded by context params on * an input member's shape. Context params are superseded by * static context params. The result of this combination is then * merged with any appropriate arguments from the command. */ private function normalizeEndpointProviderArgs( $endpointCommandArgs, $clientArgs, $contextParams, $staticContextParams ) { $commandContextParams = array_merge($contextParams, $staticContextParams); $combinedEndpointArgs = array_merge($clientArgs, $commandContextParams);
return array_merge($combinedEndpointArgs, $endpointCommandArgs); }
private function bindContextParams($commandArgs, $contextParams) { $scopedParams = [];
foreach($contextParams as $name => $spec) { if (isset($commandArgs[$spec['shape']])) { $scopedParams[$name] = $commandArgs[$spec['shape']]; } } return $scopedParams; }
private function bindStaticContextParams($staticContextParams) { $scopedParams = [];
forEach($staticContextParams as $paramName => $paramValue) { $scopedParams[$paramName] = $paramValue['value']; } return $scopedParams; }
private function filterEndpointCommandArgs( $rulesetParams, $commandArgs ) { $endpointMiddlewareOpts = [ '@use_dual_stack_endpoint' => 'UseDualStack', '@use_accelerate_endpoint' => 'Accelerate', '@use_path_style_endpoint' => 'ForcePathStyle' ];
$filteredArgs = [];
foreach($rulesetParams as $name => $value) { if (isset($commandArgs[$name])) { if (!empty($value->getBuiltIn())) { continue; } $filteredArgs[$name] = $commandArgs[$name]; } }
if ($this->api->getServiceName() === 's3') { foreach($endpointMiddlewareOpts as $optionName => $newValue) { if (isset($commandArgs[$optionName])) { $filteredArgs[$newValue] = $commandArgs[$optionName]; } } }
return $filteredArgs; }
private function applyHeaders($endpoint, &$headers) { if (!is_null($endpoint->getHeaders())) { $headers = array_merge( $headers, $endpoint->getHeaders() ); } }
private function applyAuthSchemeToCommand($endpoint, $command) { if (isset($endpoint->getProperties()['authSchemes'])) { $authScheme = $this->selectAuthScheme( $endpoint->getProperties()['authSchemes'] ); $command->setAuthSchemes($authScheme); } }
private function selectAuthScheme($authSchemes) { $validAuthSchemes = ['sigv4', 'sigv4a', 'none', 'bearer']; $invalidAuthSchemes = [];
foreach($authSchemes as $authScheme) { if (in_array($authScheme['name'], $validAuthSchemes)) { return $this->normalizeAuthScheme($authScheme); } else { $invalidAuthSchemes[] = "`{$authScheme['name']}`"; } }
$invalidAuthSchemesString = implode(', ', $invalidAuthSchemes); $validAuthSchemesString = '`' . implode('`, `', $validAuthSchemes) . '`'; throw new \InvalidArgumentException( "This operation requests {$invalidAuthSchemesString}" . " auth schemes, but the client only supports {$validAuthSchemesString}." ); }
private function normalizeAuthScheme($authScheme) { /* sigv4a will contain a regionSet property. which is guaranteed to be `*` for now. The SigV4 class handles this automatically for now. It seems complexity will be added here in the future. */ $normalizedAuthScheme = [];
if (isset($authScheme['disableDoubleEncoding']) && $authScheme['disableDoubleEncoding'] === true && $authScheme['name'] !== 'sigv4a' ) { $normalizedAuthScheme['version'] = 's3v4'; } elseif ($authScheme['name'] === 'none') { $normalizedAuthScheme['version'] = 'anonymous'; } else { $normalizedAuthScheme['version'] = str_replace( 'sig', '', $authScheme['name'] ); }
$normalizedAuthScheme['name'] = isset($authScheme['signingName']) ? $authScheme['signingName'] : null; $normalizedAuthScheme['region'] = isset($authScheme['signingRegion']) ? $authScheme['signingRegion'] : null; $normalizedAuthScheme['signingRegionSet'] = isset($authScheme['signingRegionSet']) ? $authScheme['signingRegionSet'] : null;
return $normalizedAuthScheme; }
private function applyScheme(&$resolvedUrl) { $resolvedEndpointScheme = parse_url($resolvedUrl, PHP_URL_SCHEME); $scheme = $this->endpoint instanceof Uri ? $this->endpoint->getScheme() : parse_url($this->endpoint, PHP_URL_SCHEME);
if (!empty($scheme) && $scheme !== $resolvedEndpointScheme) { $resolvedUrl = str_replace( $resolvedEndpointScheme, $scheme, $resolvedUrl ); } } }
|