| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | 
							- <?php
 
- namespace Qcloud\Cos;
 
- use Guzzle\Service\Description\Parameter;
 
- use Guzzle\Service\Description\ServiceDescription;
 
- use GuzzleHttp\HandlerStack;
 
- use Psr\Http\Message\RequestInterface;
 
- use Psr\Http\Message\ResponseInterface;
 
- use Qcloud\Cos\Signature;
 
- use GuzzleHttp\Command\Guzzle\Description;
 
- use GuzzleHttp\Command\Guzzle\GuzzleClient;
 
- use GuzzleHttp\Command\CommandInterface;
 
- use GuzzleHttp\Exception\RequestException;
 
- use GuzzleHttp\Middleware;
 
- use GuzzleHttp\Psr7;
 
- use GuzzleHttp\Psr7\Uri;
 
- use InvalidArgumentException;
 
- class CommandToRequestTransformer {
 
-     private $config;
 
-     private $operation;
 
-     public function __construct($config ,$operation) {
 
-         $this->config = $config;
 
-         $this->operation = $operation;
 
-     }
 
-     // format bucket style
 
-     public function bucketStyleTransformer(CommandInterface $command, RequestInterface $request) {
 
-         $action = $command->getName();
 
-         if ($action == 'ListBuckets') {
 
-             return $request->withUri(new Uri($this->config['schema']."://service.cos.myqcloud.com/"));
 
-         }
 
-         $operation = $this->operation;
 
-         $bucketname = $command['Bucket'];
 
-         $appId = $this->config['appId'];
 
-         if ($appId != null && endWith($bucketname, '-'.$appId) == False)
 
-         {
 
-             $bucketname = $bucketname.'-'.$appId;
 
-         }
 
-         $command['Bucket'] = $bucketname;
 
-         $path = ''; 
 
-         $http_method = $operation['httpMethod'];
 
-         $uri = $operation['uri'];
 
-         
 
-         // Hoststyle is used by default
 
-         // Pathstyle
 
-         if ($this->config['pathStyle'] != true) {
 
-             if (isset($operation['parameters']['Bucket']) && $command->hasParam('Bucket')) {
 
-                 $uri = str_replace("{Bucket}", '', $uri);
 
-             }   
 
-             if (isset($operation['parameters']['Key']) && $command->hasParam('Key')) {
 
-                 $uri = str_replace("{/Key*}", encodeKey($command['Key']), $uri);
 
-             }
 
-         }
 
-         $origin_host = $bucketname. '.cos.' . $this->config['region'] . '.' . $this->config['endpoint'];
 
-         // domain
 
-         if ($this->config['domain'] != null) {
 
-             $origin_host = $this->config['domain'];
 
-         }
 
-         $host = $origin_host;
 
-         if ($this->config['ip'] != null) {
 
-             $host = $this->config['ip'];
 
-             if ($this->config['port'] != null) {
 
-                 $host = $this->config['ip'] . ":" . $this->config['port'];
 
-             }
 
-         }
 
-         $path = $this->config['schema'].'://'. $host . $uri;
 
-         $uri = new Uri($path);
 
-         $query = $request->getUri()->getQuery();
 
-         if ($uri->getQuery() != $query && $uri->getQuery() != "") {
 
-             $query =   $uri->getQuery() . "&" . $request->getUri()->getQuery();
 
-         }
 
-         $uri = $uri->withQuery($query);
 
-         $request = $request->withUri($uri);
 
-         $request = $request->withHeader('Host', $origin_host);
 
-         return $request;
 
-     }
 
-     // format upload body
 
-     public function uploadBodyTransformer(CommandInterface $command, $request, $bodyParameter = 'Body', $sourceParameter = 'SourceFile') {
 
-         
 
-         $operation = $this->operation;
 
-         if (!isset($operation['parameters']['Body'])) {
 
-             return $request;
 
-         }
 
-         $source = isset($command[$sourceParameter]) ? $command[$sourceParameter] : null;
 
-         $body = isset($command[$bodyParameter]) ? $command[$bodyParameter] : null;
 
-         // If a file path is passed in then get the file handle
 
-         if (is_string($source) && file_exists($source)) {
 
-             $body = fopen($source, 'rb');
 
-         }
 
-         // Prepare the body parameter and remove the source file parameter
 
-         if (null !== $body) {
 
-             return $request;
 
-         } else {
 
-             throw new InvalidArgumentException(
 
-                 "You must specify a non-null value for the {$bodyParameter} or {$sourceParameter} parameters.");
 
-         }
 
-     }
 
-     // update md5
 
-     public function md5Transformer(CommandInterface $command, $request) {
 
-         $operation = $this->operation;
 
-         if (isset($operation['data']['contentMd5'])) {
 
-             $request = $this->addMd5($request);
 
-         }
 
-         if (isset($operation['parameters']['ContentMD5']) &&
 
-             isset($command['ContentMD5'])) {
 
-             $value = $command['ContentMD5'];
 
-             if ($value === true) {
 
-                 $request = $this->addMd5($request);
 
-             }
 
-         }
 
-         return $request;
 
-     }
 
-     // add meta
 
-     public function metadataTransformer(CommandInterface $command, $request) {
 
-         $operation = $this->operation;
 
-         if (isset($command['Metadata'])) {
 
-             $meta = $command['Metadata'];
 
-             foreach ($meta as $key => $value) {
 
-                 $request = $request->withHeader('x-cos-meta-' . $key, $value);
 
-             }
 
-         }
 
-         $request = headersMap($command, $request);  
 
-         return $request;
 
-     }
 
-     // count md5
 
-     private function addMd5($request) {
 
-         $body = $request->getBody();
 
-         if ($body && $body->getSize() > 0) {
 
-             $md5 = base64_encode(md5($body, true));
 
-             return $request->withHeader('Content-MD5', $md5);
 
-         }
 
-         return $request;
 
-     }
 
-     // inventoryId
 
-     public function specialParamTransformer(CommandInterface $command, $request) {
 
-         $action = $command->getName();
 
-         if ($action == 'PutBucketInventory') {
 
-             $id = $command['Id'];
 
-             $uri = $request->getUri();
 
-             $query = $uri->getQuery();
 
-             $uri = $uri->withQuery($query . "&Id=".$id);
 
-             return $request->withUri($uri);
 
-         }
 
-         return $request;
 
-     }
 
-     public function __destruct() {
 
-     }
 
- }
 
 
  |