1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- namespace Aws;
- use Aws\Api\Service;
- use Psr\Http\Message\RequestInterface;
- use Psr\Log\InvalidArgumentException;
- /**
- * Used to update the host based on a modeled endpoint trait
- *
- * IMPORTANT: this middleware must be added after the "build" step.
- *
- * @internal
- */
- class EndpointParameterMiddleware
- {
- /** @var callable */
- private $nextHandler;
- /** @var Service */
- private $service;
- /**
- * Create a middleware wrapper function
- *
- * @param Service $service
- * @param array $args
- * @return \Closure
- */
- public static function wrap(Service $service)
- {
- return function (callable $handler) use ($service) {
- return new self($handler, $service);
- };
- }
- public function __construct(callable $nextHandler, Service $service)
- {
- $this->nextHandler = $nextHandler;
- $this->service = $service;
- }
- public function __invoke(CommandInterface $command, RequestInterface $request)
- {
- $nextHandler = $this->nextHandler;
- $operation = $this->service->getOperation($command->getName());
- if (!empty($operation['endpoint']['hostPrefix'])) {
- $prefix = $operation['endpoint']['hostPrefix'];
- // Captures endpoint parameters stored in the modeled host.
- // These are denoted by enclosure in braces, i.e. '{param}'
- preg_match_all("/\{([a-zA-Z0-9]+)}/", $prefix, $parameters);
- if (!empty($parameters[1])) {
- // Captured parameters without braces stored in $parameters[1],
- // which should correspond to members in the Command object
- foreach ($parameters[1] as $index => $parameter) {
- if (empty($command[$parameter])) {
- throw new \InvalidArgumentException(
- "The parameter '{$parameter}' must be set and not empty."
- );
- }
- // Captured parameters with braces stored in $parameters[0],
- // which are replaced by their corresponding Command value
- $prefix = str_replace(
- $parameters[0][$index],
- $command[$parameter],
- $prefix
- );
- }
- }
- $uri = $request->getUri();
- $host = $prefix . $uri->getHost();
- if (!\Aws\is_valid_hostname($host)) {
- throw new \InvalidArgumentException(
- "The supplied parameters result in an invalid hostname: '{$host}'."
- );
- }
- $request = $request->withUri($uri->withHost($host));
- }
- return $nextHandler($command, $request);
- }
- }
|