| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | 
							- <?php
 
- namespace Aws\EventBridge;
 
- use Aws\CommandInterface;
 
- use Aws\Endpoint\EndpointProvider;
 
- use Aws\Endpoint\PartitionEndpointProvider;
 
- use InvalidArgumentException;
 
- use Psr\Http\Message\RequestInterface;
 
- /**
 
-  * Reroutes an eventbridge request to the proper endpoint
 
-  * @internal
 
-  */
 
- class EventBridgeEndpointMiddleware
 
- {
 
-     private $nextHandler;
 
-     private $region;
 
-     private $config;
 
-     private $endpointProvider;
 
-     private $isCustomEndpoint;
 
-     /**
 
-      * Provide the URI scheme of the client sending requests.
 
-      * @param EndpointProvider $endpointProvider
 
-      * @return callable
 
-      */
 
-     public static function wrap($region, $config, $endpointProvider, $isCustomEndpoint)
 
-     {
 
-         return function (callable $handler) use (
 
-             $region,
 
-             $config,
 
-             $endpointProvider,
 
-             $isCustomEndpoint
 
-         ) {
 
-             return new self(
 
-                 $handler,
 
-                 $region,
 
-                 $config,
 
-                 $endpointProvider,
 
-                 $isCustomEndpoint
 
-             );
 
-         };
 
-     }
 
-     public function __construct(
 
-         callable $nextHandler,
 
-         $region,
 
-         $config,
 
-         $endpointProvider,
 
-         $isCustomEndpoint
 
-     ) {
 
-         $this->nextHandler = $nextHandler;
 
-         $this->region = $region;
 
-         $this->config = $config;
 
-         $this->endpointProvider = is_null($endpointProvider)
 
-             ? PartitionEndpointProvider::defaultProvider()
 
-             : $endpointProvider;
 
-         $this->isCustomEndpoint = $isCustomEndpoint;
 
-     }
 
-     public function __invoke(CommandInterface $cmd, RequestInterface $req) {
 
-         $sigV4aCommands = ['PutEvents'];
 
-         if (in_array($cmd->getName(), $sigV4aCommands)) {
 
-             if (isset($cmd['EndpointId'])) {
 
-                 $endpointID = $cmd['EndpointId'];
 
-                 $this->validateEndpointId($endpointID);
 
-                 if (!$this->isCustomEndpoint) {
 
-                     $dnsSuffix = $this->endpointProvider
 
-                         ->getPartition($this->region, 'eventbridge')
 
-                         ->getDnsSuffix();
 
-                     $newUri = "{$endpointID}.endpoint.events.{$dnsSuffix}";
 
-                     $oldUri = $req->getUri();
 
-                     $req = $req->withUri($oldUri->withHost($newUri));
 
-                 }
 
-                 $cmd['@context']['signature_version'] = 'v4a';
 
-             }
 
-         }
 
-         $f = $this->nextHandler;
 
-         return $f($cmd, $req);
 
-     }
 
-     protected static function isValidHostLabel($string)
 
-     {
 
-         if (empty($string) || strlen($string) > 63) {
 
-             return false;
 
-         }
 
-         if ($value = preg_match("/^[a-zA-Z0-9-.]+$/", $string)) {
 
-             return true;
 
-         }
 
-         return false;
 
-     }
 
-     /**
 
-      * @param $endpointID
 
-      * @param CommandInterface $cmd
 
-      */
 
-     private function validateEndpointId($endpointID)
 
-     {
 
-         if (empty($endpointID)) {
 
-             throw new \InvalidArgumentException("EventId must be a non-empty string");
 
-         }
 
-         if (!self::isValidHostLabel($endpointID)) {
 
-             throw new InvalidArgumentException("EventId must be a valid host");
 
-         }
 
-         if ($this->config['use_fips_endpoint']) {
 
-             throw new InvalidArgumentException(
 
-                 "EventId is currently not compatible with FIPS pseudo regions"
 
-             );
 
-         }
 
-         if ($this->config['dual_stack']) {
 
-             throw new InvalidArgumentException(
 
-                 "EventId is currently not compatible with dualstack"
 
-             );
 
-         }
 
-     }
 
- }
 
 
  |