summaryrefslogtreecommitdiff
path: root/vendor/aws/aws-sdk-php/src/InputValidationMiddleware.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/InputValidationMiddleware.php')
-rw-r--r--vendor/aws/aws-sdk-php/src/InputValidationMiddleware.php76
1 files changed, 76 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/InputValidationMiddleware.php b/vendor/aws/aws-sdk-php/src/InputValidationMiddleware.php
new file mode 100644
index 0000000..bd46582
--- /dev/null
+++ b/vendor/aws/aws-sdk-php/src/InputValidationMiddleware.php
@@ -0,0 +1,76 @@
+<?php
+namespace Aws;
+
+use Aws\Api\Service;
+
+/**
+ * Validates the required input parameters of commands are non empty
+ *
+ * @internal
+ */
+class InputValidationMiddleware
+{
+
+ /** @var callable */
+ private $nextHandler;
+
+ /** @var array */
+ private $mandatoryAttributeList;
+
+ /** @var Service */
+ private $service;
+
+ /**
+ * Create a middleware wrapper function.
+ *
+ * @param Service $service
+ * @param array $mandatoryAttributeList
+ * @return callable */
+ public static function wrap(Service $service, $mandatoryAttributeList) {
+ if (!is_array($mandatoryAttributeList) ||
+ array_filter($mandatoryAttributeList, 'is_string') !== $mandatoryAttributeList
+ ) {
+ throw new \InvalidArgumentException(
+ "The mandatory attribute list must be an array of strings"
+ );
+ }
+ return function (callable $handler) use ($service, $mandatoryAttributeList) {
+ return new self($handler, $service, $mandatoryAttributeList);
+ };
+ }
+
+ public function __construct(
+ callable $nextHandler,
+ Service $service,
+ $mandatoryAttributeList
+ ) {
+ $this->service = $service;
+ $this->nextHandler = $nextHandler;
+ $this->mandatoryAttributeList = $mandatoryAttributeList;
+ }
+
+ public function __invoke(CommandInterface $cmd) {
+ $nextHandler = $this->nextHandler;
+ $op = $this->service->getOperation($cmd->getName())->toArray();
+ if (!empty($op['input']['shape'])) {
+ $service = $this->service->toArray();
+ if (!empty($input = $service['shapes'][$op['input']['shape']])) {
+ if (!empty($input['required'])) {
+ foreach ($input['required'] as $key => $member) {
+ if (in_array($member, $this->mandatoryAttributeList)) {
+ $argument = is_string($cmd[$member]) ? trim($cmd[$member]) : $cmd[$member];
+ if ($argument === '' || $argument === null) {
+ $commandName = $cmd->getName();
+ throw new \InvalidArgumentException(
+ "The {$commandName} operation requires non-empty parameter: {$member}"
+ );
+ }
+ }
+ }
+ }
+ }
+ }
+ return $nextHandler($cmd);
+ }
+
+}