diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Service/WindowsAzure/Credentials/SharedKey.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Service/WindowsAzure/Credentials/SharedKey.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,187 @@ +_usePathStyleUri) { + $path = substr($path, strpos($path, '/')); + } + + // Determine query + $queryString = $this->_prepareQueryStringForSigning($queryString); + + // Canonicalized headers + $canonicalizedHeaders = array(); + + // Request date + $requestDate = ''; + if (isset($headers[Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date'])) { + $requestDate = $headers[Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date']; + } else { + $requestDate = gmdate('D, d M Y H:i:s', time()) . ' GMT'; // RFC 1123 + $canonicalizedHeaders[] = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date:' . $requestDate; + } + + // Build canonicalized headers + if ($headers !== null) { + foreach ($headers as $header => $value) { + if (is_bool($value)) { + $value = $value === true ? 'True' : 'False'; + } + + $headers[$header] = $value; + if (substr($header, 0, strlen(Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER)) == Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER) { + $canonicalizedHeaders[] = strtolower($header) . ':' . $value; + } + } + } + sort($canonicalizedHeaders); + + // Build canonicalized resource string + $canonicalizedResource = '/' . $this->_accountName; + if ($this->_usePathStyleUri) { + $canonicalizedResource .= '/' . $this->_accountName; + } + $canonicalizedResource .= $path; + if ($queryString !== '') { + $queryStringItems = $this->_makeArrayOfQueryString($queryString); + foreach ($queryStringItems as $key => $value) { + $canonicalizedResource .= "\n" . strtolower($key) . ':' . $value; + } + } + + // Content-Length header + $contentLength = ''; + if (strtoupper($httpVerb) != Zend_Http_Client::GET + && strtoupper($httpVerb) != Zend_Http_Client::DELETE + && strtoupper($httpVerb) != Zend_Http_Client::HEAD) { + $contentLength = 0; + + if ($rawData !== null) { + $contentLength = strlen($rawData); + } + } + + // Create string to sign + $stringToSign = array(); + $stringToSign[] = strtoupper($httpVerb); // VERB + $stringToSign[] = $this->_issetOr($headers, 'Content-Encoding', ''); // Content-Encoding + $stringToSign[] = $this->_issetOr($headers, 'Content-Language', ''); // Content-Language + $stringToSign[] = $contentLength; // Content-Length + $stringToSign[] = $this->_issetOr($headers, 'Content-MD5', ''); // Content-MD5 + $stringToSign[] = $this->_issetOr($headers, 'Content-Type', ''); // Content-Type + $stringToSign[] = ""; // Date + $stringToSign[] = $this->_issetOr($headers, 'If-Modified-Since', ''); // If-Modified-Since + $stringToSign[] = $this->_issetOr($headers, 'If-Match', ''); // If-Match + $stringToSign[] = $this->_issetOr($headers, 'If-None-Match', ''); // If-None-Match + $stringToSign[] = $this->_issetOr($headers, 'If-Unmodified-Since', ''); // If-Unmodified-Since + $stringToSign[] = $this->_issetOr($headers, 'Range', ''); // Range + + if (!$forTableStorage && count($canonicalizedHeaders) > 0) { + $stringToSign[] = implode("\n", $canonicalizedHeaders); // Canonicalized headers + } + + $stringToSign[] = $canonicalizedResource; // Canonicalized resource + $stringToSign = implode("\n", $stringToSign); + $signString = base64_encode(hash_hmac('sha256', $stringToSign, $this->_accountKey, true)); + + // Sign request + $headers[Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date'] = $requestDate; + $headers['Authorization'] = 'SharedKey ' . $this->_accountName . ':' . $signString; + + // Return headers + return $headers; + } +}