diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Oauth/Signature/SignatureAbstract.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Oauth/Signature/SignatureAbstract.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,183 @@ +_consumerSecret = $consumerSecret; + if (isset($tokenSecret)) { + $this->_tokenSecret = $tokenSecret; + } + $this->_key = $this->_assembleKey(); + if (isset($hashAlgo)) { + $this->_hashAlgorithm = $hashAlgo; + } + } + + /** + * Sign a request + * + * @param array $params + * @param null|string $method + * @param null|string $url + * @return string + */ + public abstract function sign(array $params, $method = null, $url = null); + + /** + * Normalize the base signature URL + * + * @param string $url + * @return string + */ + public function normaliseBaseSignatureUrl($url) + { + $uri = Zend_Uri_Http::fromString($url); + if ($uri->getScheme() == 'http' && $uri->getPort() == '80') { + $uri->setPort(''); + } elseif ($uri->getScheme() == 'https' && $uri->getPort() == '443') { + $uri->setPort(''); + } + $uri->setQuery(''); + $uri->setFragment(''); + $uri->setHost(strtolower($uri->getHost())); + return $uri->getUri(true); + } + + /** + * Assemble key from consumer and token secrets + * + * @return string + */ + protected function _assembleKey() + { + $parts = array($this->_consumerSecret); + if ($this->_tokenSecret !== null) { + $parts[] = $this->_tokenSecret; + } + foreach ($parts as $key => $secret) { + $parts[$key] = Zend_Oauth_Http_Utility::urlEncode($secret); + } + return implode('&', $parts); + } + + /** + * Get base signature string + * + * @param array $params + * @param null|string $method + * @param null|string $url + * @return string + */ + protected function _getBaseSignatureString(array $params, $method = null, $url = null) + { + $encodedParams = array(); + foreach ($params as $key => $value) { + $encodedParams[Zend_Oauth_Http_Utility::urlEncode($key)] = + Zend_Oauth_Http_Utility::urlEncode($value); + } + $baseStrings = array(); + if (isset($method)) { + $baseStrings[] = strtoupper($method); + } + if (isset($url)) { + // should normalise later + $baseStrings[] = Zend_Oauth_Http_Utility::urlEncode( + $this->normaliseBaseSignatureUrl($url) + ); + } + if (isset($encodedParams['oauth_signature'])) { + unset($encodedParams['oauth_signature']); + } + $baseStrings[] = Zend_Oauth_Http_Utility::urlEncode( + $this->_toByteValueOrderedQueryString($encodedParams) + ); + return implode('&', $baseStrings); + } + + /** + * Transform an array to a byte value ordered query string + * + * @param array $params + * @return string + */ + protected function _toByteValueOrderedQueryString(array $params) + { + $return = array(); + uksort($params, 'strnatcmp'); + foreach ($params as $key => $value) { + if (is_array($value)) { + natsort($value); + foreach ($value as $keyduplicate) { + $return[] = $key . '=' . $keyduplicate; + } + } else { + $return[] = $key . '=' . $value; + } + } + return implode('&', $return); + } +}