diff -r 000000000000 -r 4eba9c11703f web/Zend/Service/WindowsAzure/Credentials/CredentialsAbstract.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/Zend/Service/WindowsAzure/Credentials/CredentialsAbstract.php Mon Dec 13 18:29:26 2010 +0100 @@ -0,0 +1,244 @@ +_accountName = $accountName; + $this->_accountKey = base64_decode($accountKey); + $this->_usePathStyleUri = $usePathStyleUri; + } + + /** + * Set account name for Windows Azure + * + * @param string $value + * @return Zend_Service_WindowsAzure_Credentials_CredentialsAbstract + */ + public function setAccountName($value = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::DEVSTORE_ACCOUNT) + { + $this->_accountName = $value; + return $this; + } + + /** + * Set account key for Windows Azure + * + * @param string $value + * @return Zend_Service_WindowsAzure_Credentials_CredentialsAbstract + */ + public function setAccountkey($value = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::DEVSTORE_KEY) + { + $this->_accountKey = base64_decode($value); + return $this; + } + + /** + * Set use path-style URI's + * + * @param boolean $value + * @return Zend_Service_WindowsAzure_Credentials_CredentialsAbstract + */ + public function setUsePathStyleUri($value = false) + { + $this->_usePathStyleUri = $value; + return $this; + } + + /** + * Sign request URL with credentials + * + * @param string $requestUrl Request URL + * @param string $resourceType Resource type + * @param string $requiredPermission Required permission + * @return string Signed request URL + */ + abstract public function signRequestUrl( + $requestUrl = '', + $resourceType = Zend_Service_WindowsAzure_Storage::RESOURCE_UNKNOWN, + $requiredPermission = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PERMISSION_READ + ); + + /** + * Sign request headers with credentials + * + * @param string $httpVerb HTTP verb the request will use + * @param string $path Path for the request + * @param string $queryString Query string for the request + * @param array $headers x-ms headers to add + * @param boolean $forTableStorage Is the request for table storage? + * @param string $resourceType Resource type + * @param string $requiredPermission Required permission + * @param mixed $rawData Raw post data + * @return array Array of headers + */ + abstract public function signRequestHeaders( + $httpVerb = Zend_Http_Client::GET, + $path = '/', + $queryString = '', + $headers = null, + $forTableStorage = false, + $resourceType = Zend_Service_WindowsAzure_Storage::RESOURCE_UNKNOWN, + $requiredPermission = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PERMISSION_READ, + $rawData = null + ); + + + /** + * Prepare query string for signing + * + * @param string $value Original query string + * @return string Query string for signing + */ + protected function _prepareQueryStringForSigning($value) + { + // Return value + $returnValue = array(); + + // Prepare query string + $queryParts = $this->_makeArrayOfQueryString($value); + foreach ($queryParts as $key => $value) { + $returnValue[] = $key . '=' . $value; + } + + // Return + if (count($returnValue) > 0) { + return '?' . implode('&', $returnValue); + } else { + return ''; + } + } + + /** + * Make array of query string + * + * @param string $value Query string + * @return array Array of key/value pairs + */ + protected function _makeArrayOfQueryString($value) + { + // Returnvalue + $returnValue = array(); + + // Remove front ? + if (strlen($value) > 0 && strpos($value, '?') === 0) { + $value = substr($value, 1); + } + + // Split parts + $queryParts = explode('&', $value); + foreach ($queryParts as $queryPart) { + $queryPart = explode('=', $queryPart, 2); + + if ($queryPart[0] != '') { + $returnValue[ $queryPart[0] ] = isset($queryPart[1]) ? $queryPart[1] : ''; + } + } + + // Sort + ksort($returnValue); + + // Return + return $returnValue; + } + + /** + * Returns an array value if the key is set, otherwide returns $valueIfNotSet + * + * @param array $array + * @param mixed $key + * @param mixed $valueIfNotSet + * @return mixed + */ + protected function _issetOr($array, $key, $valueIfNotSet) + { + return isset($array[$key]) ? $array[$key] : $valueIfNotSet; + } +}