From 2809357cc002592f8c4f641ac9dc71b3ffc8b42d Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Wed, 3 Dec 2014 10:09:28 -0600 Subject: [PATCH 1/6] Removing QQ and Weibo providers, as these link to a fork of oauth2-client and not directly to individual provider packages --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 74616d9..a52e966 100644 --- a/README.md +++ b/README.md @@ -128,8 +128,6 @@ so please help them out with a pull request if you notice this. - [Odnoklassniki](https://packagist.org/packages/aego/oauth2-odnoklassniki) - [Yandex](https://packagist.org/packages/aego/oauth2-yandex) - [Mail.ru](https://packagist.org/packages/aego/oauth2-mailru) -- [QQ](https://github.com/tlikai/oauth2-client) -- [Weibo](https://github.com/tlikai/oauth2-client) - [Meetup](https://github.com/howlowck/meetup-oauth2-provider) ### Implementing your own provider From a6eb0742ca7f4b9112465c7314463b236b9a016c Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Wed, 3 Dec 2014 10:10:56 -0600 Subject: [PATCH 2/6] Alphabetically sort provider names --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a52e966..7011e21 100644 --- a/README.md +++ b/README.md @@ -125,10 +125,10 @@ These providers allow integration with other providers not supported by `oauth2- so please help them out with a pull request if you notice this. - [Battle.net](https://packagist.org/packages/depotwarehouse/oauth2-bnet) -- [Odnoklassniki](https://packagist.org/packages/aego/oauth2-odnoklassniki) -- [Yandex](https://packagist.org/packages/aego/oauth2-yandex) - [Mail.ru](https://packagist.org/packages/aego/oauth2-mailru) - [Meetup](https://github.com/howlowck/meetup-oauth2-provider) +- [Odnoklassniki](https://packagist.org/packages/aego/oauth2-odnoklassniki) +- [Yandex](https://packagist.org/packages/aego/oauth2-yandex) ### Implementing your own provider From 85d88a449eaf253b64a3803474cbe67e8c68b577 Mon Sep 17 00:00:00 2001 From: Brooke Bryan Date: Wed, 3 Dec 2014 18:10:25 +0000 Subject: [PATCH 3/6] Provide base methods for userUid, userEmail and userScreenName + Tests --- src/Provider/AbstractProvider.php | 30 ++++++++++-- test/src/Provider/AbstractProviderTest.php | 57 +++++++++++++++++++++- 2 files changed, 81 insertions(+), 6 deletions(-) diff --git a/src/Provider/AbstractProvider.php b/src/Provider/AbstractProvider.php index 602691a..327c6b8 100644 --- a/src/Provider/AbstractProvider.php +++ b/src/Provider/AbstractProvider.php @@ -33,6 +33,9 @@ abstract class AbstractProvider implements ProviderInterface public $headers = null; + /** + * @var GuzzleClient + */ protected $httpClient; protected $redirectHandler; @@ -93,7 +96,7 @@ abstract class AbstractProvider implements ProviderInterface * @param AccessToken $token * @return string */ - abstract public function urlUserDetails(\League\OAuth2\Client\Token\AccessToken $token); + abstract public function urlUserDetails(AccessToken $token); /** * Given an object response from the server, process the user details into a format expected by the user @@ -103,7 +106,7 @@ abstract class AbstractProvider implements ProviderInterface * @param AccessToken $token * @return mixed */ - abstract public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token); + abstract public function userDetails($response, AccessToken $token); public function getScopes() { @@ -131,7 +134,8 @@ abstract class AbstractProvider implements ProviderInterface return $this->urlAuthorize().'?'.$this->httpBuildQuery($params, '', '&'); } - public function authorize($options = []) + // @codeCoverageIgnoreStart + public function authorize($options = array()) { $url = $this->getAuthorizationUrl($options); if ($this->redirectHandler) { @@ -174,8 +178,8 @@ abstract class AbstractProvider implements ProviderInterface // @codeCoverageIgnoreStart // No providers included with this library use get but 3rd parties may $client = $this->getHttpClient(); - $client->setBaseUrl($this->urlAccessToken().'?'.$this->httpBuildQuery($requestParams, '', '&')); - $request = $client->send(); + $client->setBaseUrl($this->urlAccessToken() . '?' . $this->httpBuildQuery($requestParams, '', '&')); + $request = $client->get(null, null, $requestParams)->send(); $response = $request->getBody(); break; // @codeCoverageIgnoreEnd @@ -263,6 +267,21 @@ abstract class AbstractProvider implements ProviderInterface return $this->userScreenName(json_decode($response), $token); } + public function userUid($response, AccessToken $token) + { + return isset($response->id) && $response->id ? $response->id : null; + } + + public function userEmail($response, AccessToken $token) + { + return isset($response->email) && $response->email ? $response->email : null; + } + + public function userScreenName($response, AccessToken $token) + { + return isset($response->name) && $response->name ? $response->name : null; + } + /** * Build HTTP the HTTP query, handling PHP version control options * @@ -270,6 +289,7 @@ abstract class AbstractProvider implements ProviderInterface * @param integer $numeric_prefix * @param string $arg_separator * @param null|integer $enc_type + * * @return string * @codeCoverageIgnoreStart */ diff --git a/test/src/Provider/AbstractProviderTest.php b/test/src/Provider/AbstractProviderTest.php index 06bb031..c19f4c3 100644 --- a/test/src/Provider/AbstractProviderTest.php +++ b/test/src/Provider/AbstractProviderTest.php @@ -2,10 +2,15 @@ namespace League\OAuth2\Client\Test\Provider; -use Mockery as m; +use League\OAuth2\Client\Provider\AbstractProvider; +use League\OAuth2\Client\Token\AccessToken; +use \Mockery as m; class AbstractProviderTest extends \PHPUnit_Framework_TestCase { + /** + * @var AbstractProvider + */ protected $provider; protected function setUp() @@ -87,6 +92,56 @@ class AbstractProviderTest extends \PHPUnit_Framework_TestCase $this->assertNotFalse($this->testFunction); } + + /** + * @param $response + * + * @dataProvider userPropertyProvider + */ + public function testGetUserProperties($response, $name = null, $email = null, $id = null) + { + $token = new AccessToken(['access_token' => 'abc', 'expires_in' => 3600]); + + $provider = $this->getMockForAbstractClass( + '\League\OAuth2\Client\Provider\AbstractProvider', + [ + [ + 'clientId' => 'mock_client_id', + 'clientSecret' => 'mock_secret', + 'redirectUri' => 'none', + ] + ] + ); + + /** + * @var $provider AbstractProvider + */ + + $this->assertEquals($name, $provider->userScreenName($response, $token)); + $this->assertEquals($email, $provider->userEmail($response, $token)); + $this->assertEquals($id, $provider->userUid($response, $token)); + } + + public function userPropertyProvider() + { + $response = new \stdClass(); + $response->id = 1; + $response->email = 'test@example.com'; + $response->name = 'test'; + + $response2 = new \stdClass(); + $response2->id = null; + $response2->email = null; + $response2->name = null; + + $response3 = new \stdClass(); + + return [ + [$response, 'test', 'test@example.com', 1], + [$response2], + [$response3], + ]; + } } class MockProvider extends \League\OAuth2\Client\Provider\AbstractProvider From 28d6c4ed2b96d1282130f57454a73f1a5c460c58 Mon Sep 17 00:00:00 2001 From: Jack Wall Date: Mon, 8 Dec 2014 16:53:39 +0000 Subject: [PATCH 4/6] adding link to external vkontakte package --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7011e21..e98c657 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,7 @@ so please help them out with a pull request if you notice this. - [Meetup](https://github.com/howlowck/meetup-oauth2-provider) - [Odnoklassniki](https://packagist.org/packages/aego/oauth2-odnoklassniki) - [Yandex](https://packagist.org/packages/aego/oauth2-yandex) +- [Vkontakte](https://packagist.org/packages/j4k/oauth2-vkontakte) ### Implementing your own provider From 6684093ae0d99c24875df6b21a7653ef46a10d1c Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Mon, 15 Dec 2014 11:57:30 -0600 Subject: [PATCH 5/6] Updating PHP Code Sniffer and fixing some CS violations --- composer.json | 2 +- src/Provider/AbstractProvider.php | 8 ++++---- src/Provider/Google.php | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/composer.json b/composer.json index fa09a48..d9fe5af 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ "require-dev": { "phpunit/phpunit": "~4.0", "mockery/mockery": "~0.9", - "squizlabs/php_codesniffer": "~1.5" + "squizlabs/php_codesniffer": "~2.0" }, "keywords": [ "oauth", diff --git a/src/Provider/AbstractProvider.php b/src/Provider/AbstractProvider.php index 602691a..52c849b 100644 --- a/src/Provider/AbstractProvider.php +++ b/src/Provider/AbstractProvider.php @@ -37,10 +37,10 @@ abstract class AbstractProvider implements ProviderInterface protected $redirectHandler; - /** - * @var int This represents: PHP_QUERY_RFC1738, which is the default value for php 5.4 - * and the default encryption type for the http_build_query setup - */ + /** + * @var int This represents: PHP_QUERY_RFC1738, which is the default value for php 5.4 + * and the default encryption type for the http_build_query setup + */ protected $httpBuildEncType = 1; public function __construct($options = []) diff --git a/src/Provider/Google.php b/src/Provider/Google.php index 7e15267..5578f2b 100644 --- a/src/Provider/Google.php +++ b/src/Provider/Google.php @@ -13,10 +13,10 @@ class Google extends AbstractProvider 'https://www.googleapis.com/auth/userinfo.email', ]; - /** - * @var string If set, this will be sent to google as the "hd" parameter. - * @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param - */ + /** + * @var string If set, this will be sent to google as the "hd" parameter. + * @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param + */ public $hostedDomain = ''; public function setHostedDomain($hd) From bc3845d9e50f71afd21e7af1e959417ba60cd4ed Mon Sep 17 00:00:00 2001 From: Brooke Bryan Date: Mon, 15 Dec 2014 18:17:29 +0000 Subject: [PATCH 6/6] Code style improvements --- src/Provider/AbstractProvider.php | 4 +-- test/src/Provider/AbstractProviderTest.php | 32 +++++++++++----------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/Provider/AbstractProvider.php b/src/Provider/AbstractProvider.php index 327c6b8..71820d1 100644 --- a/src/Provider/AbstractProvider.php +++ b/src/Provider/AbstractProvider.php @@ -135,7 +135,7 @@ abstract class AbstractProvider implements ProviderInterface } // @codeCoverageIgnoreStart - public function authorize($options = array()) + public function authorize($options = []) { $url = $this->getAuthorizationUrl($options); if ($this->redirectHandler) { @@ -179,7 +179,7 @@ abstract class AbstractProvider implements ProviderInterface // No providers included with this library use get but 3rd parties may $client = $this->getHttpClient(); $client->setBaseUrl($this->urlAccessToken() . '?' . $this->httpBuildQuery($requestParams, '', '&')); - $request = $client->get(null, null, $requestParams)->send(); + $request = $client->get(null, null, $requestParams)->send(); $response = $request->getBody(); break; // @codeCoverageIgnoreEnd diff --git a/test/src/Provider/AbstractProviderTest.php b/test/src/Provider/AbstractProviderTest.php index c19f4c3..f14e991 100644 --- a/test/src/Provider/AbstractProviderTest.php +++ b/test/src/Provider/AbstractProviderTest.php @@ -4,7 +4,7 @@ namespace League\OAuth2\Client\Test\Provider; use League\OAuth2\Client\Provider\AbstractProvider; use League\OAuth2\Client\Token\AccessToken; -use \Mockery as m; +use Mockery as m; class AbstractProviderTest extends \PHPUnit_Framework_TestCase { @@ -103,14 +103,14 @@ class AbstractProviderTest extends \PHPUnit_Framework_TestCase $token = new AccessToken(['access_token' => 'abc', 'expires_in' => 3600]); $provider = $this->getMockForAbstractClass( - '\League\OAuth2\Client\Provider\AbstractProvider', - [ + '\League\OAuth2\Client\Provider\AbstractProvider', [ - 'clientId' => 'mock_client_id', - 'clientSecret' => 'mock_secret', - 'redirectUri' => 'none', + [ + 'clientId' => 'mock_client_id', + 'clientSecret' => 'mock_secret', + 'redirectUri' => 'none', + ] ] - ] ); /** @@ -124,22 +124,22 @@ class AbstractProviderTest extends \PHPUnit_Framework_TestCase public function userPropertyProvider() { - $response = new \stdClass(); - $response->id = 1; + $response = new \stdClass(); + $response->id = 1; $response->email = 'test@example.com'; - $response->name = 'test'; + $response->name = 'test'; - $response2 = new \stdClass(); - $response2->id = null; + $response2 = new \stdClass(); + $response2->id = null; $response2->email = null; - $response2->name = null; + $response2->name = null; $response3 = new \stdClass(); return [ - [$response, 'test', 'test@example.com', 1], - [$response2], - [$response3], + [$response, 'test', 'test@example.com', 1], + [$response2], + [$response3], ]; } }