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; }
/** * 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; }