/**
* Sign given request with [[signatureMethod]].
* @param \yii\httpclient\Request $request request instance.
* @param OAuthToken|null $token OAuth token to be used for signature, if not set [[accessToken]] will be used.
* @since 2.1 this method is public.
*/
public function signRequest($request, $token = null)
{
$params = $request->getData();
if (isset($params['oauth_signature_method'])) {
// avoid double sign of request
return;
}
if (empty($params)) {
$params = $this->generateCommonRequestParams();
} else {
$params = array_merge($this->generateCommonRequestParams(), $params);
}
$url = $request->getFullUrl();
$signatureMethod = $this->getSignatureMethod();
$params['oauth_signature_method'] = $signatureMethod->getName();
$signatureBaseString = $this->composeSignatureBaseString($request->getMethod(), $url, $params);
$signatureKey = $this->composeSignatureKey($token);
$params['oauth_signature'] = $signatureMethod->generateSignature($signatureBaseString, $signatureKey);
$request->setData($params);
if ($this->authorizationHeaderMethods === null || in_array(strtoupper($request->getMethod()), array_map('strtoupper', $this->authorizationHeaderMethods), true)) {
$authorizationHeader = $this->composeAuthorizationHeader($params);
if (!empty($authorizationHeader)) {
$request->addHeaders($authorizationHeader);
}
}
}