diff --git a/extensions/authclient/BaseOAuth.php b/extensions/authclient/BaseOAuth.php index aa82d7f..5413759 100644 --- a/extensions/authclient/BaseOAuth.php +++ b/extensions/authclient/BaseOAuth.php @@ -168,15 +168,17 @@ abstract class BaseOAuth extends BaseClient implements ClientInterface * @param string $method request type. * @param string $url request URL. * @param array $params request params. + * @param array $headers additional request headers. * @return array response. * @throws Exception on failure. */ - protected function sendRequest($method, $url, array $params = []) + protected function sendRequest($method, $url, array $params = [], array $headers = []) { $curlOptions = $this->mergeCurlOptions( $this->defaultCurlOptions(), $this->getCurlOptions(), [ + CURLOPT_HTTPHEADER => $headers, CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => $url, ], @@ -479,10 +481,11 @@ abstract class BaseOAuth extends BaseClient implements ClientInterface * @param string $apiSubUrl API sub URL, which will be append to [[apiBaseUrl]], or absolute API URL. * @param string $method request method. * @param array $params request parameters. + * @param array $headers additional request headers. * @return array API response * @throws Exception on failure. */ - public function api($apiSubUrl, $method = 'GET', array $params = []) + public function api($apiSubUrl, $method = 'GET', array $params = [], array $headers = []) { if (preg_match('/^https?:\\/\\//is', $apiSubUrl)) { $url = $apiSubUrl; @@ -494,7 +497,7 @@ abstract class BaseOAuth extends BaseClient implements ClientInterface throw new Exception('Invalid access token.'); } - return $this->apiInternal($accessToken, $url, $method, $params); + return $this->apiInternal($accessToken, $url, $method, $params, $headers); } /** @@ -520,8 +523,9 @@ abstract class BaseOAuth extends BaseClient implements ClientInterface * @param string $url absolute API URL. * @param string $method request method. * @param array $params request parameters. + * @param array $headers additional request headers. * @return array API response. * @throws Exception on failure. */ - abstract protected function apiInternal($accessToken, $url, $method, array $params); + abstract protected function apiInternal($accessToken, $url, $method, array $params, array $headers); } diff --git a/extensions/authclient/CHANGELOG.md b/extensions/authclient/CHANGELOG.md index 0a76967..daa783c 100644 --- a/extensions/authclient/CHANGELOG.md +++ b/extensions/authclient/CHANGELOG.md @@ -6,6 +6,7 @@ Yii Framework 2 authclient extension Change Log - Bug #3633: OpenId return URL comparison advanced to prevent url encode problem (klimov-paul) - Enh #3416: VKontakte OAuth support added (klimov-paul) +- Enh #4076: Request HTTP headers argument added to `yii\authclient\BaseOAuth::api()` method (klimov-paul) - Enh #4139: User attributes requesting at GoogleOAuth switched to Google+ API (klimov-paul) diff --git a/extensions/authclient/OAuth1.php b/extensions/authclient/OAuth1.php index eea790c..265c927 100644 --- a/extensions/authclient/OAuth1.php +++ b/extensions/authclient/OAuth1.php @@ -151,14 +151,15 @@ class OAuth1 extends BaseOAuth * @param string $method request type. * @param string $url request URL. * @param array $params request params. + * @param array $headers additional request headers. * @return array response. */ - protected function sendSignedRequest($method, $url, array $params = []) + protected function sendSignedRequest($method, $url, array $params = [], array $headers = []) { $params = array_merge($params, $this->generateCommonRequestParams()); $params = $this->signRequest($method, $url, $params); - return $this->sendRequest($method, $url, $params); + return $this->sendRequest($method, $url, $params, $headers); } /** @@ -206,19 +207,13 @@ class OAuth1 extends BaseOAuth } /** - * Performs request to the OAuth API. - * @param OAuthToken $accessToken actual access token. - * @param string $url absolute API URL. - * @param string $method request method. - * @param array $params request parameters. - * @return array API response. - * @throws Exception on failure. + * @inheritdoc */ - protected function apiInternal($accessToken, $url, $method, array $params) + protected function apiInternal($accessToken, $url, $method, array $params, array $headers) { $params['oauth_consumer_key'] = $this->consumerKey; $params['oauth_token'] = $accessToken->getToken(); - $response = $this->sendSignedRequest($method, $url, $params); + $response = $this->sendSignedRequest($method, $url, $params, $headers); return $response; } diff --git a/extensions/authclient/OAuth2.php b/extensions/authclient/OAuth2.php index 35a7e78..76f22a7 100644 --- a/extensions/authclient/OAuth2.php +++ b/extensions/authclient/OAuth2.php @@ -132,19 +132,13 @@ class OAuth2 extends BaseOAuth } /** - * Performs request to the OAuth API. - * @param OAuthToken $accessToken actual access token. - * @param string $url absolute API URL. - * @param string $method request method. - * @param array $params request parameters. - * @return array API response. - * @throws Exception on failure. + * @inheritdoc */ - protected function apiInternal($accessToken, $url, $method, array $params) + protected function apiInternal($accessToken, $url, $method, array $params, array $headers) { $params['access_token'] = $accessToken->getToken(); - return $this->sendRequest($method, $url, $params); + return $this->sendRequest($method, $url, $params, $headers); } /** diff --git a/extensions/authclient/clients/LinkedIn.php b/extensions/authclient/clients/LinkedIn.php index 78d78d5..9b3b7e2 100644 --- a/extensions/authclient/clients/LinkedIn.php +++ b/extensions/authclient/clients/LinkedIn.php @@ -128,11 +128,11 @@ class LinkedIn extends OAuth2 /** * @inheritdoc */ - protected function apiInternal($accessToken, $url, $method, array $params) + protected function apiInternal($accessToken, $url, $method, array $params, array $headers) { $params['oauth2_access_token'] = $accessToken->getToken(); - return $this->sendRequest($method, $url, $params); + return $this->sendRequest($method, $url, $params, $headers); } /** diff --git a/extensions/authclient/clients/VKontakte.php b/extensions/authclient/clients/VKontakte.php index c25001a..652f48b 100644 --- a/extensions/authclient/clients/VKontakte.php +++ b/extensions/authclient/clients/VKontakte.php @@ -80,11 +80,11 @@ class VKontakte extends OAuth2 /** * @inheritdoc */ - protected function apiInternal($accessToken, $url, $method, array $params) + protected function apiInternal($accessToken, $url, $method, array $params, array $headers) { $params['uids'] = $accessToken->getParam('user_id'); $params['access_token'] = $accessToken->getToken(); - return $this->sendRequest($method, $url, $params); + return $this->sendRequest($method, $url, $params, $headers); } /** diff --git a/extensions/authclient/clients/YandexOAuth.php b/extensions/authclient/clients/YandexOAuth.php index c419fd4..7a2197c 100644 --- a/extensions/authclient/clients/YandexOAuth.php +++ b/extensions/authclient/clients/YandexOAuth.php @@ -64,14 +64,14 @@ class YandexOAuth extends OAuth2 /** * @inheritdoc */ - protected function apiInternal($accessToken, $url, $method, array $params) + protected function apiInternal($accessToken, $url, $method, array $params, array $headers) { if (!isset($params['format'])) { $params['format'] = 'json'; } $params['oauth_token'] = $accessToken->getToken(); - return $this->sendRequest($method, $url, $params); + return $this->sendRequest($method, $url, $params, $headers); } /**