/** * Normalize parameter values. Parameters are sorted by name, using lexicographical byte value ordering. * If two or more parameters share the same name, they are sorted by their value. * Parameters are concatenated in their sorted order into a single string. * For each parameter, the name is separated from the corresponding value by an "=" character, * even if the value is empty. Each name-value pair is separated by an "&" character. */ public function normalize($params) { ksort($params); $paramList = array(); foreach ($params as $k => $values) { if (is_array($values)) { asort($values); foreach ($values as $v) { $paramList[] = OauthHelper::escape($k) . '=' . OauthHelper::escape($v); } } else { $paramList[] = OauthHelper::escape($k) . '=' . OauthHelper::escape($values); } } return implode('&', $paramList); }
/** * Set oauth request to query string * * @return void */ private function __setOAuthQueryString() { $oauthParamsStr = OauthHelper::mapper($this->oauthHelper->oauthParameters(), "&", ''); $uri = $this->sock->parseUri($this->path); if (!isset($uri['query']) || $uri['query'] == '' || count($uri['query']) == 0) { $uri['query'] = $oauthParamsStr; } else { $uri['query'] = OauthHelper::mapper($uri['query'], "&", '') . "&" . $oauthParamsStr; } $this->path($uri); $signature = "&oauth_signature=" . OauthHelper::escape($this->oauthHelper->signature()); $this->sock->config['request']['uri']['query'] .= $signature; $this->query = $this->sock->config['request']['uri']['query']; //OauthHelper::log('setOAuthQueryString::config' . $this->sock->config); //OauthHelper::log('setOAuthQueryString::query' . $this->query); //$this->sockUri->config['request']['uri']['query'] .= $signature; }
/** * Authorization header for OAuth * * @return string */ public function oauthHeader($options = array()) { $headerParams = array(); foreach ($this->oauthParameters() as $name => $value) { $headerParams[] = $name . '="' . OauthHelper::escape($value) . '"'; } $headerParamsStr = join(', ', $headerParams); if (!empty($this->options['realm'])) { $realm = 'realm="' . $this->options['realm'] . '", "'; } else { $realm = ''; } return "OAuth " . $realm . $headerParamsStr; }
/** * Generate base string for signature * * @return string */ public function signatureBaseString() { $normalizedParams = $this->request->parametersForSignature(); ksort($normalizedParams); $normalizedParamsJoined = array(); foreach ($normalizedParams as $key => $value) { $normalizedParamsJoined[] = OauthHelper::escape($key) . '=' . OauthHelper::escape($value); } $normalizedParams = implode('&', $normalizedParamsJoined); $base = array($this->request->method(), $this->request->uri(), $normalizedParams); $result = implode("&", array_map(array(&$this, 'escape'), $base)); OauthHelper::log(array('signatureBaseString' => $result)); return $result; }