diff --git a/README.md b/README.md index 521cce3..9ad4ed2 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ This package provides Yahoo OAuth 2.0 support for the PHP League's [OAuth 2.0 Client](https://github.com/thephpleague/oauth2-client). -This package is compliant with [PSR-1][], [PSR-2][] and [PSR-4][]. If you notice compliance oversights, please send +This package is compliant with [PSR-1](https://www.php-fig.org/psr/psr-1/), [PSR-2](https://www.php-fig.org/psr/psr-2/) and [PSR-4](https://www.php-fig.org/psr/psr-4/). If you notice compliance oversights, please send a patch via pull request. @@ -13,9 +13,9 @@ a patch via pull request. The following versions of PHP are supported. -* PHP 5.5 * PHP 5.6 * PHP 7.0 +* PHP 7.1 * HHVM ## Installation @@ -148,7 +148,6 @@ $ ./vendor/bin/phpunit - [Ravishanker Kusuma](https://github.com/hayageek/) - ## License The MIT License (MIT). Please see [License File](https://github.com/hayageek/oauth2-yahoo/blob/master/LICENSE) for more information. diff --git a/composer.json b/composer.json index dbbd852..aa61160 100644 --- a/composer.json +++ b/composer.json @@ -7,6 +7,10 @@ "name": "Ravishanker Kusuma", "email": "hayageek@gmail.com", "homepage": "http://hayageek.com" + }, + { + "name": "Timothy Asp", + "email": "tim@asp.consulting" } ], "keywords": [ @@ -20,7 +24,7 @@ "minimum-stability": "dev", "prefer-stable" : true, "require": { - "league/oauth2-client": "^1.0" + "league/oauth2-client": "^2.0" }, "require-dev": { "phpunit/phpunit": "~4.0", diff --git a/examples/provider.php b/examples/provider.php index 171b8b7..5a217ed 100644 --- a/examples/provider.php +++ b/examples/provider.php @@ -7,10 +7,10 @@ // Replace these with your token settings // Create a project at https://developer.yahoo.com/apps -$clientId = '<your_client_id>'; +$clientId = '<your_client_id>'; $clientSecret = '<yout_client_secret>'; // Change this if you are not using the built-in PHP server -$redirectUri = 'http://myapp.com/index.php'; +$redirectUri = 'http://myapp.com/index.php'; // Start the session session_start(); diff --git a/examples/user.php b/examples/user.php index c350582..bbee618 100644 --- a/examples/user.php +++ b/examples/user.php @@ -15,16 +15,16 @@ // We got an access token, let's now get the user's details - $ownerDetails = $provider->getResourceOwner($token); + $ownerDetails = $provider->getResourceOwner($token); // Use these details to create a new profile - echo 'Name: '.$ownerDetails->getName()."<br>"; - echo 'FirstName: '.$ownerDetails->getFirstName()."<br>"; - echo 'Lastname: '.$ownerDetails->getLastName()."<br>"; - - echo 'Email: '.$ownerDetails->getEmail()."<br>"; - echo 'Image: '.$ownerDetails->getAvatar()."<br>"; + echo 'Name: ' . $ownerDetails->getName() . "<br>"; + echo 'FirstName: ' . $ownerDetails->getFirstName() . "<br>"; + echo 'Lastname: ' . $ownerDetails->getLastName() . "<br>"; + + echo 'Email: ' . $ownerDetails->getEmail() . "<br>"; + echo 'Image: ' . $ownerDetails->getAvatar() . "<br>"; } catch (Exception $e) { @@ -35,13 +35,13 @@ // Use this to interact with an API on the users behalf -echo "Token: ". $token->getToken()."<br>"; +echo "Token: " . $token->getToken() . "<br>"; // Use this to get a new access token if the old one expires -echo "Refresh Token: ".$token->getRefreshToken()."<br>"; +echo "Refresh Token: " . $token->getRefreshToken() . "<br>"; // Number of seconds until the access token will expire, and need refreshing -echo "Expires:" .$token->getExpires()."<br>"; +echo "Expires:" . $token->getExpires() . "<br>"; echo "After Refreshing Token <br>"; @@ -50,10 +50,10 @@ $token = $provider->getAccessToken($grant, ['refresh_token' => $token->getRefreshToken()]); // Use this to interact with an API on the users behalf -echo "Token: ". $token->getToken()."<br>"; +echo "Token: " . $token->getToken() . "<br>"; // Use this to get a new access token if the old one expires -echo "Refresh Token: ".$token->getRefreshToken()."<br>"; +echo "Refresh Token: " . $token->getRefreshToken() . "<br>"; // Number of seconds until the access token will expire, and need refreshing -echo "Expires:" .$token->getExpires()."<br>"; +echo "Expires:" . $token->getExpires() . "<br>"; diff --git a/src/Provider/Yahoo.php b/src/Provider/Yahoo.php index 4b82657..be2082b 100644 --- a/src/Provider/Yahoo.php +++ b/src/Provider/Yahoo.php @@ -14,14 +14,12 @@ class Yahoo extends AbstractProvider const ACCESS_TOKEN_RESOURCE_OWNER_ID = 'xoauth_yahoo_guid'; - /* https://developer.yahoo.com/oauth2/guide/flows_authcode/#step-2-get-an-authorization-url-and-authorize-access */ protected $language = "en-us"; - private $imageSize='192x192'; - + private $imageSize = '192x192'; public function getBaseAuthorizationUrl() { @@ -35,30 +33,29 @@ public function getBaseAccessTokenUrl(array $params) public function getResourceOwnerDetailsUrl(AccessToken $token) { - $guid = $token->getResourceOwnerId(); - - return 'https://social.yahooapis.com/v1/user/'.$guid.'/profile?format=json'; + + return 'https://social.yahooapis.com/v1/user/' . $guid . '/profile?format=json'; } - + /** * Get user image from provider * - * @param array $response - * @param AccessToken $token + * @param array $response + * @param AccessToken $token * * @return array */ protected function getUserImage(array $response, AccessToken $token) { $guid = $token->getResourceOwnerId(); - - $url = 'https://social.yahooapis.com/v1/user/'.$guid.'/profile/image/'.$this->imageSize.'?format=json'; - + + $url = 'https://social.yahooapis.com/v1/user/' . $guid . '/profile/image/' . $this->imageSize . '?format=json'; + $request = $this->getAuthenticatedRequest('get', $url, $token); - + $response = $this->getResponse($request); - + return $response; } @@ -73,9 +70,9 @@ protected function getAuthorizationParameters(array $options) protected function getDefaultScopes() { - /* - No scope is required. scopes are part of APP Settings. - */ + /* + No scope is required. scopes are part of APP Settings. + */ return []; } @@ -86,16 +83,15 @@ protected function getScopeSeparator() protected function checkResponse(ResponseInterface $response, $data) { - if (!empty($data['error'])) { - $code = 0; + $code = 0; $error = $data['error']; - + if (is_array($error)) { - /* - No code is returned in the error - */ - $code = -1; + /* + No code is returned in the error + */ + $code = -1; $error = $error['description']; } throw new IdentityProviderException($error, $code, $data); @@ -105,25 +101,24 @@ protected function checkResponse(ResponseInterface $response, $data) protected function createResourceOwner(array $response, AccessToken $token) { $user = new YahooUser($response); - + $imageUrl = $this->getUserImageUrl($response, $token); - + return $user->setImageURL($imageUrl); - } - + /** * Get user image url from provider, if available * - * @param array $response - * @param AccessToken $token + * @param array $response + * @param AccessToken $token * * @return string */ protected function getUserImageUrl(array $response, AccessToken $token) { $image = $this->getUserImage($response, $token); - + if (isset($image['image']['imageUrl'])) { return $image['image']['imageUrl']; } diff --git a/src/Provider/YahooUser.php b/src/Provider/YahooUser.php index 051db9b..4d2141e 100644 --- a/src/Provider/YahooUser.php +++ b/src/Provider/YahooUser.php @@ -1,4 +1,5 @@ <?php + namespace Hayageek\OAuth2\Client\Provider; use League\OAuth2\Client\Provider\ResourceOwnerInterface; @@ -9,7 +10,7 @@ class YahooUser implements ResourceOwnerInterface * @var array */ protected $response; - + /** * @var image URL @@ -40,7 +41,7 @@ public function getName() nickname is not coming in the response. $this->response['profile']['nickname'] */ - return $this->getFirstName()." ".$this->getLastName(); + return $this->getFirstName() . " " . $this->getLastName(); } /** diff --git a/test/Bootstrap.php b/test/Bootstrap.php index 8941eb9..69b974a 100644 --- a/test/Bootstrap.php +++ b/test/Bootstrap.php @@ -23,14 +23,14 @@ protected static function initAutoloader() { $vendorPath = static::findParentPath('vendor'); - $loader = include $vendorPath.'/autoload.php'; + $loader = include $vendorPath . '/autoload.php'; } protected static function findParentPath($path) { $dir = __DIR__; $previousDir = '.'; - while (!is_dir($dir.'/'.$path)) { + while (!is_dir($dir . '/' . $path)) { $dir = dirname($dir); if ($previousDir === $dir) { return false; @@ -38,7 +38,7 @@ protected static function findParentPath($path) $previousDir = $dir; } - return $dir.'/'.$path; + return $dir . '/' . $path; } } diff --git a/test/src/Provider/YahooTest.php b/test/src/Provider/YahooTest.php index 114d584..54af285 100644 --- a/test/src/Provider/YahooTest.php +++ b/test/src/Provider/YahooTest.php @@ -1,9 +1,10 @@ <?php + namespace Hayageek\OAuth2\Client\Test\Provider; -require(__DIR__ .'/../../../vendor/autoload.php'); -use Hayageek\OAuth2\Client\Provider\Yahoo as YahooProvider; +require(__DIR__ . '/../../../vendor/autoload.php'); +use Hayageek\OAuth2\Client\Provider\Yahoo as YahooProvider; use Mockery as m; class YahooTest extends \PHPUnit_Framework_TestCase @@ -41,18 +42,18 @@ public function testAuthorizationUrl() $this->assertArrayHasKey('language', $query); $this->assertEquals('mock_client_id', $query['client_id']); - $this->assertEquals('none', $query['redirect_uri']); - $this->assertEquals('en-us', $query['language']); - $this->assertEquals('code', $query['response_type']); - - + $this->assertEquals('none', $query['redirect_uri']); + $this->assertEquals('en-us', $query['language']); + $this->assertEquals('code', $query['response_type']); + + $this->assertAttributeNotEmpty('state', $this->provider); } public function testBaseAccessTokenUrl() { $url = $this->provider->getBaseAccessTokenUrl([]); - + $uri = parse_url($url); parse_str($uri['path'], $query); @@ -63,28 +64,31 @@ public function testResourceOwnerDetailsUrl() { $token = m::mock('League\OAuth2\Client\Token\AccessToken'); - $token->shouldReceive('getResourceOwnerId')->once()->andReturn('mocguid'); + $token->shouldReceive('getResourceOwnerId')->once()->andReturn('mocguid'); $url = $this->provider->getResourceOwnerDetailsUrl($token); $uri = parse_url($url); $this->assertEquals('/v1/user/mocguid/profile', $uri['path']); } + public function testUserData() { - $response = json_decode('{"profile":{"guid":"mocguid","emails":[{"handle":"mock_email","id":2,"primary":false,"type":"HOME"}],"familyName":"mock_family_name","givenName":"mock_given_name","uri":"mock_url"}}', true); - $imageData = json_decode('{"image": {"uri": "mock_uril","height": 192,"imageUrl": "mock_image_url", "size": "192x192", "width": 192 } }',true); + $response = json_decode('{"profile":{"guid":"mocguid","emails":[{"handle":"mock_email","id":2,"primary":false,"type":"HOME"}],"familyName":"mock_family_name","givenName":"mock_given_name","uri":"mock_url"}}', + true); + $imageData = json_decode('{"image": {"uri": "mock_uril","height": 192,"imageUrl": "mock_image_url", "size": "192x192", "width": 192 } }', + true); $provider = m::mock('Hayageek\OAuth2\Client\Provider\Yahoo[fetchResourceOwnerDetails,getResponse]')->shouldAllowMockingProtectedMethods();; $provider->shouldReceive('fetchResourceOwnerDetails')->once()->andReturn($response); $provider->shouldReceive('getResponse')->once()->andReturn($imageData); - - + + $token = m::mock('League\OAuth2\Client\Token\AccessToken'); - $token->shouldReceive('getResourceOwnerId')->once()->andReturn('mocguid'); - + $token->shouldReceive('getResourceOwnerId')->once()->andReturn('mocguid'); + $user = $provider->getResourceOwner($token); - + $this->assertInstanceOf('League\OAuth2\Client\Provider\ResourceOwnerInterface', $user); @@ -94,16 +98,16 @@ public function testUserData() $this->assertEquals('mock_email', $user->getEmail()); $this->assertEquals('mock_image_url', $user->getAvatar()); $this->assertEquals('mock_given_name mock_family_name', $user->getName()); - + $user = $user->toArray(); $this->assertArrayHasKey('guid', $user['profile']); $this->assertArrayHasKey('handle', $user['profile']['emails'][0]); - $this->assertArrayHasKey('familyName',$user['profile']); + $this->assertArrayHasKey('familyName', $user['profile']); $this->assertArrayHasKey('givenName', $user['profile']); $this->assertArrayHasKey('imageUrl', $user); - + } /** @@ -120,16 +124,16 @@ public function testErrorResponse() $response->shouldReceive('getBody') ->andReturn(' { "error" : {"uri" : "moc_uri","lang" : "en-US","description" : "mock_description"}}'); - $provider = m::mock('Hayageek\OAuth2\Client\Provider\Yahoo[sendRequest]') + $provider = m::mock('Hayageek\OAuth2\Client\Provider\Yahoo[getResponse]') ->shouldAllowMockingProtectedMethods(); - $provider->shouldReceive('sendRequest') + $provider->shouldReceive('getResponse') ->times(1) ->andReturn($response); $token = m::mock('League\OAuth2\Client\Token\AccessToken'); - $token->shouldReceive('getResourceOwnerId')->once()->andReturn('mocguid'); - + $token->shouldReceive('getResourceOwnerId')->once()->andReturn('mocguid'); + $user = $provider->getResourceOwner($token); } }