diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Oauth/Client.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Oauth/Client.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,339 @@ +_config = new Zend_Oauth_Config; + if ($oauthOptions !== null) { + if ($oauthOptions instanceof Zend_Config) { + $oauthOptions = $oauthOptions->toArray(); + } + $this->_config->setOptions($oauthOptions); + } + } + + /** + * Return the current connection adapter + * + * @return Zend_Http_Client_Adapter_Interface|string $adapter + */ + public function getAdapter() + { + return $this->adapter; + } + + /** + * Load the connection adapter + * + * @param Zend_Http_Client_Adapter_Interface $adapter + * @return void + */ + public function setAdapter($adapter) + { + if ($adapter == null) { + $this->adapter = $adapter; + } else { + parent::setAdapter($adapter); + } + } + + /** + * Set the streamingRequest variable which controls whether we are + * sending the raw (already encoded) POST data from a stream source. + * + * @param boolean $value The value to set. + * @return void + */ + public function setStreamingRequest($value) + { + $this->_streamingRequest = $value; + } + + /** + * Check whether the client is set to perform streaming requests. + * + * @return boolean True if yes, false otherwise. + */ + public function getStreamingRequest() + { + if ($this->_streamingRequest) { + return true; + } else { + return false; + } + } + + /** + * Prepare the request body (for POST and PUT requests) + * + * @return string + * @throws Zend_Http_Client_Exception + */ + protected function _prepareBody() + { + if($this->_streamingRequest) { + $this->setHeaders(self::CONTENT_LENGTH, + $this->raw_post_data->getTotalSize()); + return $this->raw_post_data; + } + else { + return parent::_prepareBody(); + } + } + + /** + * Clear all custom parameters we set. + * + * @return Zend_Http_Client + */ + public function resetParameters($clearAll = false) + { + $this->_streamingRequest = false; + return parent::resetParameters($clearAll); + } + + /** + * Set the raw (already encoded) POST data from a stream source. + * + * This is used to support POSTing from open file handles without + * caching the entire body into memory. It is a wrapper around + * Zend_Http_Client::setRawData(). + * + * @param string $data The request data + * @param string $enctype The encoding type + * @return Zend_Http_Client + */ + public function setRawDataStream($data, $enctype = null) + { + $this->_streamingRequest = true; + return $this->setRawData($data, $enctype); + } + + /** + * Same as Zend_Http_Client::setMethod() except it also creates an + * Oauth specific reference to the method type. + * Might be defunct and removed in a later iteration. + * + * @param string $method + * @return Zend_Http_Client + */ + public function setMethod($method = self::GET) + { + if ($method == self::GET) { + $this->setRequestMethod(self::GET); + } elseif($method == self::POST) { + $this->setRequestMethod(self::POST); + } elseif($method == self::PUT) { + $this->setRequestMethod(self::PUT); + } elseif($method == self::DELETE) { + $this->setRequestMethod(self::DELETE); + } elseif($method == self::HEAD) { + $this->setRequestMethod(self::HEAD); + } + return parent::setMethod($method); + } + + /** + * Same as Zend_Http_Client::request() except just before the request is + * executed, we automatically append any necessary OAuth parameters and + * sign the request using the relevant signature method. + * + * @param string $method + * @return Zend_Http_Response + */ + public function request($method = null) + { + if ($method !== null) { + $this->setMethod($method); + } + $this->prepareOauth(); + return parent::request(); + } + + /** + * Performs OAuth preparation on the request before sending. + * + * This primarily means taking a request, correctly encoding and signing + * all parameters, and applying the correct OAuth scheme to the method + * being used. + * + * @return void + * @throws Zend_Oauth_Exception If POSTBODY scheme requested, but GET request method used; or if invalid request scheme provided + */ + public function prepareOauth() + { + $requestScheme = $this->getRequestScheme(); + $requestMethod = $this->getRequestMethod(); + $query = null; + if ($requestScheme == Zend_Oauth::REQUEST_SCHEME_HEADER) { + $oauthHeaderValue = $this->getToken()->toHeader( + $this->getUri(true), + $this->_config, + $this->_getSignableParametersAsQueryString() + ); + $this->setHeaders('Authorization', $oauthHeaderValue); + } elseif ($requestScheme == Zend_Oauth::REQUEST_SCHEME_POSTBODY) { + if ($requestMethod == self::GET) { + require_once 'Zend/Oauth/Exception.php'; + throw new Zend_Oauth_Exception( + 'The client is configured to' + . ' pass OAuth parameters through a POST body but request method' + . ' is set to GET' + ); + } + $raw = $this->getToken()->toQueryString( + $this->getUri(true), + $this->_config, + $this->_getSignableParametersAsQueryString() + ); + $this->setRawData($raw, 'application/x-www-form-urlencoded'); + $this->paramsPost = array(); + } elseif ($requestScheme == Zend_Oauth::REQUEST_SCHEME_QUERYSTRING) { + $params = array(); + $query = $this->getUri()->getQuery(); + if ($query) { + $queryParts = explode('&', $this->getUri()->getQuery()); + foreach ($queryParts as $queryPart) { + $kvTuple = explode('=', $queryPart); + $params[urldecode($kvTuple[0])] = + (array_key_exists(1, $kvTuple) ? urldecode($kvTuple[1]) : NULL); + } + } + if (!empty($this->paramsPost)) { + $params = array_merge($params, $this->paramsPost); + $query = $this->getToken()->toQueryString( + $this->getUri(true), $this->_config, $params + ); + } + $query = $this->getToken()->toQueryString( + $this->getUri(true), $this->_config, $params + ); + $this->getUri()->setQuery($query); + $this->paramsGet = array(); + } else { + require_once 'Zend/Oauth/Exception.php'; + throw new Zend_Oauth_Exception('Invalid request scheme: ' . $requestScheme); + } + } + + /** + * Collect all signable parameters into a single array across query string + * and POST body. These are returned as a properly formatted single + * query string. + * + * @return string + */ + protected function _getSignableParametersAsQueryString() + { + $params = array(); + if (!empty($this->paramsGet)) { + $params = array_merge($params, $this->paramsGet); + $query = $this->getToken()->toQueryString( + $this->getUri(true), $this->_config, $params + ); + } + if (!empty($this->paramsPost)) { + $params = array_merge($params, $this->paramsPost); + $query = $this->getToken()->toQueryString( + $this->getUri(true), $this->_config, $params + ); + } + return $params; + } + + /** + * Simple Proxy to the current Zend_Oauth_Config method. It's that instance + * which holds all configuration methods and values this object also presents + * as it's API. + * + * @param string $method + * @param array $args + * @return mixed + * @throws Zend_Oauth_Exception if method does not exist in config object + */ + public function __call($method, array $args) + { + if (!method_exists($this->_config, $method)) { + require_once 'Zend/Oauth/Exception.php'; + throw new Zend_Oauth_Exception('Method does not exist: ' . $method); + } + return call_user_func_array(array($this->_config,$method), $args); + } +}