48 'request_method' => self::REQUEST_METHOD_HEADER,
49 'consumer_key' =>
'anonymous',
50 'consumer_secret' =>
'anonymous',
51 'signature_method' =>
'HMAC-SHA1',
52 'signature_callback' =>
function($stringToSign, $key) {
53 return hash_hmac(
'sha1', $stringToSign, $key,
true);
56 'signature_method',
'signature_callback',
'version',
57 'consumer_key',
'consumer_secret'
64 'request.before_send' => array(
'onRequestBeforeSend', -1000)
78 $request = $event[
'request'];
81 $authorizationParams[
'oauth_signature'] = $this->
getSignature($request, $timestamp, $nonce);
83 switch ($this->config[
'request_method']) {
87 $this->buildAuthorizationHeader($authorizationParams)
91 foreach ($authorizationParams as $key => $value) {
92 $request->getQuery()->set($key, $value);
96 throw new \InvalidArgumentException(sprintf(
97 'Invalid consumer method "%s"',
98 $this->config[
'request_method']
102 return $authorizationParams;
112 private function buildAuthorizationHeader($authorizationParams)
114 $authorizationString =
'OAuth ';
115 foreach ($authorizationParams as $key => $val) {
117 $authorizationString .= $key .
'="' . urlencode($val) .
'", ';
121 return substr($authorizationString, 0, -2);
133 public function getSignature(RequestInterface $request, $timestamp, $nonce)
136 $key = urlencode($this->config[
'consumer_secret']) .
'&' . urlencode($this->config[
'token_secret']);
138 return base64_encode(call_user_func($this->config[
'signature_callback'], $string, $key));
158 $parameterString = clone $request->
getQuery();
159 $parameterString->replace($params);
163 return strtoupper($request->
getMethod()) .
'&'
164 . rawurlencode($url) .
'&'
165 . rawurlencode((
string) $parameterString);
178 'oauth_consumer_key' => $this->config[
'consumer_key'],
179 'oauth_nonce' => $nonce,
180 'oauth_signature_method' => $this->config[
'signature_method'],
181 'oauth_timestamp' => $timestamp,
186 $optionalParams = array(
187 'callback' =>
'oauth_callback',
188 'token' =>
'oauth_token',
189 'verifier' =>
'oauth_verifier',
190 'version' =>
'oauth_version'
193 foreach ($optionalParams as $optionName => $oauthName) {
194 if (isset($this->config[$optionName]) ==
true) {
195 $params[$oauthName] = $this->config[$optionName];
214 public function getParamsToSign(RequestInterface $request, $timestamp, $nonce)
219 $params->merge($request->getQuery());
224 $params->merge($request->getPostFields());
228 $params = $params->toArray();
229 uksort($params,
'strcmp');
245 if (!$this->config->get(
'disable_post_params') &&
247 false !== strpos($request->getHeader(
'Content-Type'),
'application/x-www-form-urlencoded'))
265 return sha1(uniqid(
'',
true) . $request->getUrl());
277 return $event[
'timestamp'] ?: time();
290 foreach ($data as $key => &$value) {
291 switch (gettype($value)) {
299 $data[$key] = $value ?
'true' :
'false';