Viewing file: SharedKeyLite.php (6.44 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Copyright (c) 2009 - 2010, RealDolmen * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of RealDolmen nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY RealDolmen ''AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL RealDolmen BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * @category Microsoft * @package Microsoft_WindowsAzure * @copyright Copyright (c) 2009 - 2010, RealDolmen (http://www.realdolmen.com) * @license http://phpazure.codeplex.com/license * @version $Id: SharedKeyCredentials.php 14561 2009-05-07 08:05:12Z unknown $ */ if (!defined('W3TC')) { die(); }
/** * @see Microsoft_WindowsAzure_Credentials_CredentialsAbstract */ require_once 'Microsoft/WindowsAzure/Credentials/CredentialsAbstract.php';
/** * @see Microsoft_WindowsAzure_Storage */ require_once 'Microsoft/WindowsAzure/Storage.php';
/** * @see Microsoft_WindowsAzure_Credentials_SharedKey */ require_once 'Microsoft/WindowsAzure/Credentials/SharedKey.php';
/** * @see Microsoft_WindowsAzure_Credentials_Exception */ require_once 'Microsoft/WindowsAzure/Credentials/Exception.php';
/** * @category Microsoft * @package Microsoft_WindowsAzure * @copyright Copyright (c) 2009 - 2010, RealDolmen (http://www.realdolmen.com) * @license http://phpazure.codeplex.com/license */ class Microsoft_WindowsAzure_Credentials_SharedKeyLite extends Microsoft_WindowsAzure_Credentials_CredentialsAbstract { /** * 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 */ public function signRequestUrl( $requestUrl = '', $resourceType = Microsoft_WindowsAzure_Storage::RESOURCE_UNKNOWN, $requiredPermission = Microsoft_WindowsAzure_Credentials_CredentialsAbstract::PERMISSION_READ ) { return $requestUrl; }
/** * 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 */ public function signRequestHeaders( $httpVerb = Microsoft_Http_Client::GET, $path = '/', $queryString = '', $headers = null, $forTableStorage = false, $resourceType = Microsoft_WindowsAzure_Storage::RESOURCE_UNKNOWN, $requiredPermission = Microsoft_WindowsAzure_Credentials_CredentialsAbstract::PERMISSION_READ, $rawData = null ) { // Table storage? if (!$forTableStorage) { throw new Microsoft_WindowsAzure_Credentials_Exception('The Windows Azure SDK for PHP does not support SharedKeyLite authentication on blob or queue storage. Use SharedKey authentication instead.'); }
// Determine path if ($this->_usePathStyleUri) { $path = substr($path, strpos($path, '/')); }
// Determine query $queryString = $this->_prepareQueryStringForSigning($queryString);
// Build canonicalized resource string $canonicalizedResource = '/' . $this->_accountName; if ($this->_usePathStyleUri) { $canonicalizedResource .= '/' . $this->_accountName; } $canonicalizedResource .= $path; if ($queryString !== '') { $canonicalizedResource .= $queryString; }
// Request date $requestDate = ''; if (isset($headers[Microsoft_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date'])) { $requestDate = $headers[Microsoft_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date']; } else { $requestDate = gmdate('D, d M Y H:i:s', time()) . ' GMT'; // RFC 1123 }
// Create string to sign $stringToSign = array(); $stringToSign[] = $requestDate; // Date $stringToSign[] = $canonicalizedResource; // Canonicalized resource $stringToSign = implode("\n", $stringToSign); $signString = base64_encode(hash_hmac('sha256', $stringToSign, $this->_accountKey, true));
// Sign request $headers[Microsoft_WindowsAzure_Credentials_CredentialsAbstract::PREFIX_STORAGE_HEADER . 'date'] = $requestDate; $headers['Authorization'] = 'SharedKeyLite ' . $this->_accountName . ':' . $signString;
// Return headers return $headers; }
/** * Prepare query string for signing * * @param string $value Original query string * @return string Query string for signing */ protected function _prepareQueryStringForSigning($value) { // Check for 'comp=' if (strpos($value, 'comp=') === false) { // If not found, no query string needed return ''; } else { // If found, make sure it is the only parameter being used if (strlen($value) > 0 && strpos($value, '?') === 0) { $value = substr($value, 1); }
// Split parts $queryParts = explode('&', $value); foreach ($queryParts as $queryPart) { if (strpos($queryPart, 'comp=') !== false) { return '?' . $queryPart; } }
// Should never happen... return ''; } } }
|