private function getCanonicalizedResource(MOXMAN_Http_HttpClientRequest $request) { $query = array(); $url = $request->getUrl(); if (isset($url["query"])) { parse_str($url["query"], $query); } $query = array_change_key_case($query); $canonicalizedResource = '/' . $this->getContainerOption("account"); $canonicalizedResource .= $url["path"]; if (count($query) > 0) { ksort($query); } foreach ($query as $key => $value) { $values = explode(',', $value); sort($values); $separated = implode(',', $values); $canonicalizedResource .= "\n" . $key . ':' . $separated; } return $canonicalizedResource; }
/** * signRequest * * @param MOXMAN_Http_HttpClientRequest $request Request from HttpClient to sign. * @return MOXMAN_Http_HttpClientRequest HttpClient Request returned with right headers signed. */ private function signRequest(MOXMAN_Http_HttpClientRequest $request) { $signData = array("Content-Encoding", "Content-Language", "Content-Length", "Content-MD5", "Content-Type", "Date", "If-Modified-Since", "If-Match", "If-None-Match", "If-Unmodified-Since", "Range"); $signed = strtoupper($request->getMethod()) . "\n"; foreach ($signData as $name) { $signed .= $request->getHeader($name) . "\n"; } $request->setHeader("x-ms-date", gmdate('D, d M Y H:i:s T', time())); $request->setHeader("x-ms-version", "2009-09-19"); foreach ($request->getHeaders() as $name => $val) { if (strpos($name, "x-ms-") === 0) { $signed .= $name . ":" . $val . "\n"; } } $url = $request->getUrl(); $signed .= "/" . $this->getContainerOption("account") . $url["path"]; if (isset($url["query"])) { $queryParts = array(); parse_str($url["query"], $queryParts); $keys = array_keys($queryParts); sort($keys); foreach ($keys as $key) { $signed .= "\n" . $key . ":" . $queryParts[$key]; } } $hash = hash_hmac("sha256", $signed, base64_decode($this->getContainerOption("sharedkey")), true); $signature = base64_encode($hash); $request->setHeader("Authorization", "SharedKey " . $this->getContainerOption("account") . ":" . $signature); return $request; }
private function getCanonicalQuery(MOXMAN_Http_HttpClientRequest $request) { $url = $request->getUrl(); // Generate Canonical query string $canonicalQuery = ""; $query = array(); parse_str(isset($url["query"]) ? $url["query"] : "", $query); uksort($query, "strcmp"); foreach ($query as $key => $value) { if ($canonicalQuery) { $canonicalQuery .= "&"; } $canonicalQuery .= $this->uriEncode($key) . "=" . $this->uriEncode($value); } return $canonicalQuery; }