|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00025 require_once 'Zend/Service/WindowsAzure/Credentials/CredentialsAbstract.php'; 00026 00030 require_once 'Zend/Service/WindowsAzure/Storage.php'; 00031 00035 require_once 'Zend/Http/Client.php'; 00036 00043 class Zend_Service_WindowsAzure_Credentials_SharedKey 00044 extends Zend_Service_WindowsAzure_Credentials_CredentialsAbstract 00045 { 00054 public function signRequestUrl( 00055 $requestUrl = '', 00056 $resourceType = Zend_Service_WindowsAzure_Storage::RESOURCE_UNKNOWN, 00057 $requiredPermission = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PERMISSION_READ 00058 ) { 00059 return $requestUrl; 00060 } 00061 00074 public function signRequestHeaders( 00075 $httpVerb = Zend_Http_Client::GET, 00076 $path = '/', 00077 $queryString = '', 00078 $headers = null, 00079 $forTableStorage = false, 00080 $resourceType = Zend_Service_WindowsAzure_Storage::RESOURCE_UNKNOWN, 00081 $requiredPermission = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PERMISSION_READ 00082 ) { 00083 // http://github.com/sriramk/winazurestorage/blob/214010a2f8931bac9c96dfeb337d56fe084ca63b/winazurestorage.py 00084 00085 // Determine path 00086 if ($this->_usePathStyleUri) { 00087 $path = substr($path, strpos($path, '/')); 00088 } 00089 00090 // Determine query 00091 $queryString = $this->_prepareQueryStringForSigning($queryString); 00092 00093 // Canonicalized headers 00094 $canonicalizedHeaders = array(); 00095 00096 // Request date 00097 $requestDate = ''; 00098 if (isset($headers[Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date'])) { 00099 $requestDate = $headers[Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date']; 00100 } else { 00101 $requestDate = gmdate('D, d M Y H:i:s', time()) . ' GMT'; // RFC 1123 00102 $canonicalizedHeaders[] = Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date:' . $requestDate; 00103 } 00104 00105 // Build canonicalized headers 00106 if (!is_null($headers)) { 00107 foreach ($headers as $header => $value) { 00108 if (is_bool($value)) { 00109 $value = $value === true ? 'True' : 'False'; 00110 } 00111 00112 $headers[$header] = $value; 00113 if (substr($header, 0, strlen(Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER)) == Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER) { 00114 $canonicalizedHeaders[] = strtolower($header) . ':' . $value; 00115 } 00116 } 00117 } 00118 sort($canonicalizedHeaders); 00119 00120 // Build canonicalized resource string 00121 $canonicalizedResource = '/' . $this->_accountName; 00122 if ($this->_usePathStyleUri) { 00123 $canonicalizedResource .= '/' . $this->_accountName; 00124 } 00125 $canonicalizedResource .= $path; 00126 if ($queryString !== '') { 00127 $canonicalizedResource .= $queryString; 00128 } 00129 00130 // Create string to sign 00131 $stringToSign = array(); 00132 $stringToSign[] = strtoupper($httpVerb); // VERB 00133 $stringToSign[] = ""; // Content-MD5 00134 $stringToSign[] = ""; // Content-Type 00135 $stringToSign[] = ""; 00136 // Date already in $canonicalizedHeaders 00137 // $stringToSign[] = self::PREFIX_STORAGE_HEADER . 'date:' . $requestDate; // Date 00138 00139 if (!$forTableStorage && count($canonicalizedHeaders) > 0) { 00140 $stringToSign[] = implode("\n", $canonicalizedHeaders); // Canonicalized headers 00141 } 00142 00143 $stringToSign[] = $canonicalizedResource; // Canonicalized resource 00144 $stringToSign = implode("\n", $stringToSign); 00145 $signString = base64_encode(hash_hmac('sha256', $stringToSign, $this->_accountKey, true)); 00146 00147 // Sign request 00148 $headers[Zend_Service_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date'] = $requestDate; 00149 $headers['Authorization'] = 'SharedKey ' . $this->_accountName . ':' . $signString; 00150 00151 // Return headers 00152 return $headers; 00153 } 00154 }