PatternEndpointProvider.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace Aws\Endpoint;
  3. /**
  4. * Provides endpoints based on an endpoint pattern configuration array.
  5. */
  6. class PatternEndpointProvider
  7. {
  8. /** @var array */
  9. private $patterns;
  10. /**
  11. * @param array $patterns Hash of endpoint patterns mapping to endpoint
  12. * configurations.
  13. */
  14. public function __construct(array $patterns)
  15. {
  16. $this->patterns = $patterns;
  17. }
  18. public function __invoke(array $args = [])
  19. {
  20. $service = isset($args['service']) ? $args['service'] : '';
  21. $region = isset($args['region']) ? $args['region'] : '';
  22. $keys = ["{$region}/{$service}", "{$region}/*", "*/{$service}", "*/*"];
  23. foreach ($keys as $key) {
  24. if (isset($this->patterns[$key])) {
  25. return $this->expand(
  26. $this->patterns[$key],
  27. isset($args['scheme']) ? $args['scheme'] : 'https',
  28. $service,
  29. $region
  30. );
  31. }
  32. }
  33. return null;
  34. }
  35. private function expand(array $config, $scheme, $service, $region)
  36. {
  37. $config['endpoint'] = $scheme . '://'
  38. . strtr($config['endpoint'], [
  39. '{service}' => $service,
  40. '{region}' => $region
  41. ]);
  42. return $config;
  43. }
  44. }