public function onBeforeSend(Event $event)
 {
     $request = $event['request'];
     if ('Guzzle\\Http\\Message\\EntityEnclosingRequest' === get_class($request)) {
         if (null === $request->getBody()) {
             $request->setBody('{}');
         }
         $hashedBody = $this->chunkedBase64Encode(Stream::getHash($request->getBody(), 'sha1', true));
     } else {
         $hashedBody = $this->sha1AndBase64Encode('');
     }
     $timestamp = gmdate("Y-m-d\\TH:i:s\\Z");
     $request->setHeader('Accept', 'application/json');
     $request->setHeader('Content-Type', 'application/json');
     $request->setHeader('X-Chef-Version', '0.10.8');
     $request->setHeader('X-Ops-Sign', 'version=1.0');
     $request->setHeader('X-Ops-Timestamp', $timestamp);
     $request->setHeader('X-Ops-Userid', $this->getClientName());
     $request->setHeader('X-Ops-Content-Hash', $hashedBody);
     $signature = $this->signRequest($request->getMethod(), $request->getPath(), $hashedBody, $timestamp);
     foreach (explode('\\n', $signature) as $i => $chunk) {
         $n = $i + 1;
         $request->setHeader("X-Ops-Authorization-{$n}", $chunk);
     }
 }
 /**
  * {@inheritdoc}
  */
 protected function getDelay($retries, RequestInterface $request, Response $response = null, HttpException $e = null)
 {
     if ($response) {
         // Validate the checksum against our computed checksum
         if ($checksum = (string) $response->getHeader('x-amz-crc32')) {
             // Retry the request if the checksums don't match, otherwise, return null
             return $checksum != hexdec(Stream::getHash($response->getBody(), 'crc32b')) ? true : null;
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function getContentMd5($rawOutput = false, $base64Encode = false)
 {
     $hash = Stream::getHash($this, 'md5', $rawOutput);
     return $hash && $base64Encode ? base64_encode($hash) : $hash;
 }
Ejemplo n.º 4
0
 /**
  * Get the payload part of a signature from a request.
  *
  * @param RequestInterface $request
  *
  * @return string
  */
 protected function getPayload(RequestInterface $request)
 {
     // Calculate the request signature payload
     if ($request->hasHeader('x-amz-content-sha256')) {
         // Handle streaming operations (e.g. Glacier.UploadArchive)
         return (string) $request->getHeader('x-amz-content-sha256');
     }
     if ($request instanceof EntityEnclosingRequestInterface) {
         if ($request->getMethod() == 'POST' && count($request->getPostFields())) {
             return hash('sha256', (string) $request->getPostFields());
         } elseif ($body = $request->getBody()) {
             return Stream::getHash($request->getBody(), 'sha256');
         }
     }
     return self::DEFAULT_PAYLOAD;
 }