Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/3rdparty.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'aws/aws-sdk-php/src/EventBridge/EventBridgeEndpointMiddleware.php')
-rw-r--r--aws/aws-sdk-php/src/EventBridge/EventBridgeEndpointMiddleware.php116
1 files changed, 116 insertions, 0 deletions
diff --git a/aws/aws-sdk-php/src/EventBridge/EventBridgeEndpointMiddleware.php b/aws/aws-sdk-php/src/EventBridge/EventBridgeEndpointMiddleware.php
new file mode 100644
index 00000000..88ca111e
--- /dev/null
+++ b/aws/aws-sdk-php/src/EventBridge/EventBridgeEndpointMiddleware.php
@@ -0,0 +1,116 @@
+<?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"
+ );
+ }
+ }
+}