Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpnamespace Aws\S3;use Aws\CommandInterface;use Psr\Http\Message\RequestInterface;/*** Simplifies the SSE-C process by encoding and hashing the key.* @internal*/class SSECMiddleware{private $endpointScheme;private $nextHandler;/*** Provide the URI scheme of the client sending requests.** @param string $endpointScheme URI scheme (http/https).** @return callable*/public static function wrap($endpointScheme){return function (callable $handler) use ($endpointScheme) {return new self($endpointScheme, $handler);};}public function __construct($endpointScheme, callable $nextHandler){$this->nextHandler = $nextHandler;$this->endpointScheme = $endpointScheme;}public function __invoke(CommandInterface $command,RequestInterface $request = null) {// Allows only HTTPS connections when using SSE-Cif (($command['SSECustomerKey'] || $command['CopySourceSSECustomerKey'])&& $this->endpointScheme !== 'https') {throw new \RuntimeException('You must configure your S3 client to '. 'use HTTPS in order to use the SSE-C features.');}// Prepare the normal SSE-CPK headersif ($command['SSECustomerKey']) {$this->prepareSseParams($command);}// If it's a copy operation, prepare the SSE-CPK headers for the source.if ($command['CopySourceSSECustomerKey']) {$this->prepareSseParams($command, 'CopySource');}$f = $this->nextHandler;return $f($command, $request);}private function prepareSseParams(CommandInterface $command, $prefix = ''){// Base64 encode the provided key$key = $command[$prefix . 'SSECustomerKey'];$command[$prefix . 'SSECustomerKey'] = base64_encode($key);// Base64 the provided MD5 or, generate an MD5 if not providedif ($md5 = $command[$prefix . 'SSECustomerKeyMD5']) {$command[$prefix . 'SSECustomerKeyMD5'] = base64_encode($md5);} else {$command[$prefix . 'SSECustomerKeyMD5'] = base64_encode(md5($key, true));}}}