77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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);
 | 
						|
    }
 | 
						|
 | 
						|
}
 |