diff --git a/README.md b/README.md index cf6b219..fd4abf3 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ damages our ability to make this package the best it can be, especially as we pr Gateway | Composer Package | Maintainer --- | --- | --- [Facebook](https://github.com/thephpleague/oauth2-facebook) | league/oauth2-facebook | [Sammy Kaye Powers](https://github.com/sammyk) -[Github](https://github.com/thephpleague/oauth2-client) | league/oauth2-client | [The League](https://github.com/thephpleague) +[Github](https://github.com/thephpleague/oauth2-github) | league/oauth2-github | [Steven Maguire](https://github.com/stevenmaguire) [Google](https://github.com/thephpleague/oauth2-google) | league/oauth2-google | [Woody Gilk](https://github.com/shadowhand) [Instagram](https://github.com/thephpleague/oauth2-instagram) | league/oauth2-instagram | [Steven Maguire](https://github.com/stevenmaguire) [LinkedIn](https://github.com/thephpleague/oauth2-linkedin) | league/oauth2-linkedin | [Steven Maguire](https://github.com/stevenmaguire) diff --git a/src/Provider/Github.php b/src/Provider/Github.php deleted file mode 100644 index 8182a4e..0000000 --- a/src/Provider/Github.php +++ /dev/null @@ -1,99 +0,0 @@ -domain.'/login/oauth/authorize'; - } - - public function urlAccessToken() - { - return $this->domain.'/login/oauth/access_token'; - } - - public function urlUserDetails(AccessToken $token) - { - if ($this->domain === 'https://github.com') { - return $this->apiDomain.'/user'; - } - return $this->domain.'/api/v3/user'; - } - - public function urlUserEmails(AccessToken $token) - { - if ($this->domain === 'https://github.com') { - return $this->apiDomain.'/user/emails'; - } - return $this->domain.'/api/v3/user/emails'; - } - - public function userDetails($response, AccessToken $token) - { - $user = new User(); - - $name = (isset($response->name)) ? $response->name : null; - $email = (isset($response->email)) ? $response->email : null; - - $user->exchangeArray([ - 'uid' => $response->id, - 'nickname' => $response->login, - 'name' => $name, - 'email' => $email, - 'urls' => [ - 'GitHub' => $this->domain.'/'.$response->login, - ], - ]); - - return $user; - } - - public function userUid($response, AccessToken $token) - { - return $response->id; - } - - public function getUserEmails(AccessToken $token) - { - $response = $this->fetchUserEmails($token); - - return $this->userEmails(json_decode($response), $token); - } - - public function userEmail($response, AccessToken $token) - { - return isset($response->email) && $response->email ? $response->email : null; - } - - public function userEmails($response, AccessToken $token) - { - return $response; - } - - public function userScreenName($response, AccessToken $token) - { - return $response->name; - } - - protected function fetchUserEmails(AccessToken $token) - { - $url = $this->urlUserEmails($token); - - $headers = $this->getHeaders($token); - - return $this->fetchProviderData($url, $headers); - } -} diff --git a/test/src/Provider/GithubTest.php b/test/src/Provider/GithubTest.php deleted file mode 100644 index fff04fb..0000000 --- a/test/src/Provider/GithubTest.php +++ /dev/null @@ -1,174 +0,0 @@ -provider = new \League\OAuth2\Client\Provider\Github([ - 'clientId' => 'mock', - 'clientSecret' => 'mock_secret', - 'redirectUri' => 'none', - ]); - } - - public function testAuthorizationUrl() - { - $url = $this->provider->getAuthorizationUrl(); - $uri = parse_url($url); - parse_str($uri['query'], $query); - - $this->assertArrayHasKey('client_id', $query); - $this->assertArrayHasKey('redirect_uri', $query); - $this->assertArrayHasKey('state', $query); - $this->assertArrayHasKey('scope', $query); - $this->assertArrayHasKey('response_type', $query); - $this->assertArrayHasKey('approval_prompt', $query); - $this->assertNotNull($this->provider->state); - } - - public function testUrlAccessToken() - { - $url = $this->provider->urlAccessToken(); - $uri = parse_url($url); - - $this->assertEquals('/login/oauth/access_token', $uri['path']); - } - - public function testGetAccessToken() - { - $client = $this->createMockHttpClient(); - $client->shouldReceive('post')->times(1)->andReturn($this->createMockResponse('access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&uid=1')); - - $this->provider->setHttpClient($client); - - $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']); - - $this->assertEquals('mock_access_token', $token->accessToken); - $this->assertLessThanOrEqual(time() + 3600, $token->expires); - $this->assertGreaterThanOrEqual(time(), $token->expires); - $this->assertEquals('mock_refresh_token', $token->refreshToken); - $this->assertEquals('1', $token->uid); - } - - /** - * @ticket 230 - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Required option not passed: access_token - */ - public function testGetAccessTokenWithInvalidJson() - { - $client = $this->createMockHttpClient(); - $response = $this->createMockResponse('invalid'); - - $client->shouldReceive('post')->times(1)->andReturn($response); - - $this->provider->setHttpClient($client); - $this->provider->responseType = 'json'; - - $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']); - } - - public function testGetAccessTokenSetResultUid() - { - $this->provider->uidKey = 'otherKey'; - - $client = $this->createMockHttpClient(); - $client->shouldReceive('post')->times(1)->andReturn($this->createMockResponse('access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&otherKey={1234}')); - - $this->provider->setHttpClient($client); - - $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']); - - $this->assertEquals('mock_access_token', $token->accessToken); - $this->assertLessThanOrEqual(time() + 3600, $token->expires); - $this->assertGreaterThanOrEqual(time(), $token->expires); - $this->assertEquals('mock_refresh_token', $token->refreshToken); - $this->assertEquals('{1234}', $token->uid); - } - - public function testScopes() - { - $this->provider->setScopes(['user', 'repo']); - $this->assertEquals(['user', 'repo'], $this->provider->getScopes()); - } - - public function testUserData() - { - $client = $this->createMockHttpClient(); - - $postResponse = $this->createMockResponse('access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&uid=1'); - $getResponse = $this->createMockResponse('{"id": 12345, "login": "mock_login", "name": "mock_name", "email": "mock_email"}'); - - $client->shouldReceive('post')->times(1)->andReturn($postResponse); - $client->shouldReceive('get')->times(4)->andReturn($getResponse); - - $this->provider->setHttpClient($client); - - $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']); - $user = $this->provider->getUserDetails($token); - - $this->assertEquals(12345, $this->provider->getUserUid($token)); - $this->assertEquals('mock_name', $this->provider->getUserScreenName($token)); - $this->assertEquals('mock_name', $user->name); - $this->assertEquals('mock_email', $this->provider->getUserEmail($token)); - } - - public function testGithubDomainUrls() - { - $client = $this->createMockHttpClient(); - $client->shouldReceive('post')->times(1)->andReturn($this->createMockResponse('access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&otherKey={1234}')); - - $this->provider->setHttpClient($client); - $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']); - - $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->apiDomain.'/user', $this->provider->urlUserDetails($token)); - $this->assertEquals($this->provider->apiDomain.'/user/emails', $this->provider->urlUserEmails($token)); - } - - public function testGithubEnterpriseDomainUrls() - { - $this->provider->domain = 'https://github.company.com'; - - $client = $this->createMockHttpClient(); - $client->shouldReceive('post')->times(1)->andReturn($this->createMockResponse('access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&otherKey={1234}')); - - $this->provider->setHttpClient($client); - $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']); - - $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.'/api/v3/user', $this->provider->urlUserDetails($token)); - $this->assertEquals($this->provider->domain.'/api/v3/user/emails', $this->provider->urlUserEmails($token)); - } - - public function testUserEmails() - { - $client = $this->createMockHttpClient(); - - $postResponse = $this->createMockResponse('access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&uid=1'); - $getResponse = $this->createMockResponse('[{"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->shouldReceive('post')->times(1)->andReturn($postResponse); - $client->shouldReceive('get')->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); - } -}