Merge pull request #189 from jeremykendall/fix/github-get-user-email
Adds methods to allow fetching user email addresses from Githuboauth1test
commit
374c3d41db
|
@ -311,6 +311,11 @@ abstract class AbstractProvider implements ProviderInterface
|
||||||
{
|
{
|
||||||
$url = $this->urlUserDetails($token);
|
$url = $this->urlUserDetails($token);
|
||||||
|
|
||||||
|
return $this->fetchProviderData($url);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function fetchProviderData($url)
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
$client = $this->getHttpClient();
|
$client = $this->getHttpClient();
|
||||||
$client->setBaseUrl($url);
|
$client->setBaseUrl($url);
|
||||||
|
@ -331,6 +336,7 @@ abstract class AbstractProvider implements ProviderInterface
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function setRedirectHandler(Closure $handler)
|
public function setRedirectHandler(Closure $handler)
|
||||||
{
|
{
|
||||||
$this->redirectHandler = $handler;
|
$this->redirectHandler = $handler;
|
||||||
|
|
|
@ -22,12 +22,20 @@ class Github extends AbstractProvider
|
||||||
|
|
||||||
public function urlUserDetails(\League\OAuth2\Client\Token\AccessToken $token)
|
public function urlUserDetails(\League\OAuth2\Client\Token\AccessToken $token)
|
||||||
{
|
{
|
||||||
if ($this->domain == 'https://github.com') {
|
if ($this->domain === 'https://github.com') {
|
||||||
return $this->domain.'/user?access_token='.$token;
|
return $this->domain.'/user?access_token='.$token;
|
||||||
}
|
}
|
||||||
return $this->domain.'/api/v3/user?access_token='.$token;
|
return $this->domain.'/api/v3/user?access_token='.$token;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function urlUserEmails(\League\OAuth2\Client\Token\AccessToken $token)
|
||||||
|
{
|
||||||
|
if ($this->domain === 'https://github.com') {
|
||||||
|
return $this->domain.'/user/emails?access_token='.$token;
|
||||||
|
}
|
||||||
|
return $this->domain.'/api/v3/user/emails?access_token='.$token;
|
||||||
|
}
|
||||||
|
|
||||||
public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token)
|
public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token)
|
||||||
{
|
{
|
||||||
$user = new User();
|
$user = new User();
|
||||||
|
@ -53,13 +61,32 @@ class Github extends AbstractProvider
|
||||||
return $response->id;
|
return $response->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getUserEmails(\League\OAuth2\Client\Token\AccessToken $token)
|
||||||
|
{
|
||||||
|
$response = $this->fetchUserEmails($token);
|
||||||
|
|
||||||
|
return $this->userEmails(json_decode($response), $token);
|
||||||
|
}
|
||||||
|
|
||||||
public function userEmail($response, \League\OAuth2\Client\Token\AccessToken $token)
|
public function userEmail($response, \League\OAuth2\Client\Token\AccessToken $token)
|
||||||
{
|
{
|
||||||
return isset($response->email) && $response->email ? $response->email : null;
|
return isset($response->email) && $response->email ? $response->email : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function userEmails($response, \League\OAuth2\Client\Token\AccessToken $token)
|
||||||
|
{
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
public function userScreenName($response, \League\OAuth2\Client\Token\AccessToken $token)
|
public function userScreenName($response, \League\OAuth2\Client\Token\AccessToken $token)
|
||||||
{
|
{
|
||||||
return $response->name;
|
return $response->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function fetchUserEmails(\League\OAuth2\Client\Token\AccessToken $token)
|
||||||
|
{
|
||||||
|
$url = $this->urlUserEmails($token);
|
||||||
|
|
||||||
|
return $this->fetchProviderData($url);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,5 +131,28 @@ class GithubTest extends \PHPUnit_Framework_TestCase
|
||||||
$this->assertEquals($this->provider->domain.'/login/oauth/authorize', $this->provider->urlAuthorize());
|
$this->assertEquals($this->provider->domain.'/login/oauth/authorize', $this->provider->urlAuthorize());
|
||||||
$this->assertEquals($this->provider->domain.'/login/oauth/access_token', $this->provider->urlAccessToken());
|
$this->assertEquals($this->provider->domain.'/login/oauth/access_token', $this->provider->urlAccessToken());
|
||||||
$this->assertEquals($this->provider->domain.'/api/v3/user?access_token=mock_access_token', $this->provider->urlUserDetails($token));
|
$this->assertEquals($this->provider->domain.'/api/v3/user?access_token=mock_access_token', $this->provider->urlUserDetails($token));
|
||||||
|
$this->assertEquals($this->provider->domain.'/api/v3/user/emails?access_token=mock_access_token', $this->provider->urlUserEmails($token));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUserEmails()
|
||||||
|
{
|
||||||
|
$postResponse = m::mock('Guzzle\Http\Message\Response');
|
||||||
|
$postResponse->shouldReceive('getBody')->times(1)->andReturn('access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&uid=1');
|
||||||
|
|
||||||
|
$getResponse = m::mock('Guzzle\Http\Message\Response');
|
||||||
|
$getResponse->shouldReceive('getBody')->times(1)->andReturn('[{"email":"mock_email_1","primary":false,"verified":true},{"email":"mock_email_2","primary":false,"verified":true},{"email":"mock_email_3","primary":true,"verified":true}]');
|
||||||
|
|
||||||
|
$client = m::mock('Guzzle\Service\Client');
|
||||||
|
$client->shouldReceive('setBaseUrl')->times(2);
|
||||||
|
$client->shouldReceive('post->send')->times(1)->andReturn($postResponse);
|
||||||
|
$client->shouldReceive('get->send')->times(1)->andReturn($getResponse);
|
||||||
|
$this->provider->setHttpClient($client);
|
||||||
|
|
||||||
|
$token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
|
||||||
|
$emails = $this->provider->getUserEmails($token);
|
||||||
|
$this->assertInternalType('array', $emails);
|
||||||
|
$this->assertCount(3, $emails);
|
||||||
|
$this->assertEquals('mock_email_3', $emails[2]->email);
|
||||||
|
$this->assertTrue($emails[2]->primary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue