Merge branch 'master' into 1.0

1.0
Ben Ramsey 2014-12-15 14:21:52 -06:00
commit a5c1ce821f
5 changed files with 91 additions and 17 deletions

View File

@ -125,12 +125,11 @@ These providers allow integration with other providers not supported by `oauth2-
so please help them out with a pull request if you notice this. so please help them out with a pull request if you notice this.
- [Battle.net](https://packagist.org/packages/depotwarehouse/oauth2-bnet) - [Battle.net](https://packagist.org/packages/depotwarehouse/oauth2-bnet)
- [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) - [Odnoklassniki](https://packagist.org/packages/aego/oauth2-odnoklassniki)
- [Yandex](https://packagist.org/packages/aego/oauth2-yandex) - [Yandex](https://packagist.org/packages/aego/oauth2-yandex)
- [Mail.ru](https://packagist.org/packages/aego/oauth2-mailru) - [Vkontakte](https://packagist.org/packages/j4k/oauth2-vkontakte)
- [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 ### Implementing your own provider

View File

@ -9,7 +9,7 @@
"require-dev": { "require-dev": {
"phpunit/phpunit": "~4.0", "phpunit/phpunit": "~4.0",
"mockery/mockery": "~0.9", "mockery/mockery": "~0.9",
"squizlabs/php_codesniffer": "~1.5" "squizlabs/php_codesniffer": "~2.0"
}, },
"keywords": [ "keywords": [
"oauth", "oauth",

View File

@ -33,14 +33,17 @@ abstract class AbstractProvider implements ProviderInterface
public $headers = null; public $headers = null;
/**
* @var GuzzleClient
*/
protected $httpClient; protected $httpClient;
protected $redirectHandler; protected $redirectHandler;
/** /**
* @var int This represents: PHP_QUERY_RFC1738, which is the default value for php 5.4 * @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 * and the default encryption type for the http_build_query setup
*/ */
protected $httpBuildEncType = 1; protected $httpBuildEncType = 1;
public function __construct($options = []) public function __construct($options = [])
@ -93,7 +96,7 @@ abstract class AbstractProvider implements ProviderInterface
* @param AccessToken $token * @param AccessToken $token
* @return string * @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 * 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 * @param AccessToken $token
* @return mixed * @return mixed
*/ */
abstract public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token); abstract public function userDetails($response, AccessToken $token);
public function getScopes() public function getScopes()
{ {
@ -131,6 +134,7 @@ abstract class AbstractProvider implements ProviderInterface
return $this->urlAuthorize().'?'.$this->httpBuildQuery($params, '', '&'); return $this->urlAuthorize().'?'.$this->httpBuildQuery($params, '', '&');
} }
// @codeCoverageIgnoreStart
public function authorize($options = []) public function authorize($options = [])
{ {
$url = $this->getAuthorizationUrl($options); $url = $this->getAuthorizationUrl($options);
@ -174,8 +178,8 @@ abstract class AbstractProvider implements ProviderInterface
// @codeCoverageIgnoreStart // @codeCoverageIgnoreStart
// No providers included with this library use get but 3rd parties may // No providers included with this library use get but 3rd parties may
$client = $this->getHttpClient(); $client = $this->getHttpClient();
$client->setBaseUrl($this->urlAccessToken().'?'.$this->httpBuildQuery($requestParams, '', '&')); $client->setBaseUrl($this->urlAccessToken() . '?' . $this->httpBuildQuery($requestParams, '', '&'));
$request = $client->send(); $request = $client->get(null, null, $requestParams)->send();
$response = $request->getBody(); $response = $request->getBody();
break; break;
// @codeCoverageIgnoreEnd // @codeCoverageIgnoreEnd
@ -267,6 +271,21 @@ abstract class AbstractProvider implements ProviderInterface
return $this->userScreenName(json_decode($response), $token); 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 * Build HTTP the HTTP query, handling PHP version control options
* *
@ -274,6 +293,7 @@ abstract class AbstractProvider implements ProviderInterface
* @param integer $numeric_prefix * @param integer $numeric_prefix
* @param string $arg_separator * @param string $arg_separator
* @param null|integer $enc_type * @param null|integer $enc_type
*
* @return string * @return string
* @codeCoverageIgnoreStart * @codeCoverageIgnoreStart
*/ */

View File

@ -13,10 +13,10 @@ class Google extends AbstractProvider
'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.email',
]; ];
/** /**
* @var string If set, this will be sent to google as the "hd" parameter. * @var string If set, this will be sent to google as the "hd" parameter.
* @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param * @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param
*/ */
public $hostedDomain = ''; public $hostedDomain = '';
public function setHostedDomain($hd) public function setHostedDomain($hd)

View File

@ -2,10 +2,15 @@
namespace League\OAuth2\Client\Test\Provider; 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 class AbstractProviderTest extends \PHPUnit_Framework_TestCase
{ {
/**
* @var AbstractProvider
*/
protected $provider; protected $provider;
protected function setUp() protected function setUp()
@ -87,6 +92,56 @@ class AbstractProviderTest extends \PHPUnit_Framework_TestCase
$this->assertNotFalse($this->testFunction); $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 class MockProvider extends \League\OAuth2\Client\Provider\AbstractProvider