Skip to content

Commit bb12ba5

Browse files
committed
Revert to using AccessToken instead of AccessTokenInterface
Fixes #752.
1 parent 88f8381 commit bb12ba5

File tree

8 files changed

+102
-20
lines changed

8 files changed

+102
-20
lines changed

src/Provider/AbstractProvider.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,10 @@ abstract public function getBaseAccessTokenUrl(array $params);
286286
/**
287287
* Returns the URL for requesting the resource owner's details.
288288
*
289-
* @param AccessTokenInterface $token
289+
* @param AccessToken $token
290290
* @return string
291291
*/
292-
abstract public function getResourceOwnerDetailsUrl(AccessTokenInterface $token);
292+
abstract public function getResourceOwnerDetailsUrl(AccessToken $token);
293293

294294
/**
295295
* Returns a new random string to use as the state parameter in an
@@ -751,18 +751,18 @@ protected function createAccessToken(array $response, AbstractGrant $grant)
751751
* details request.
752752
*
753753
* @param array $response
754-
* @param AccessTokenInterface $token
754+
* @param AccessToken $token
755755
* @return ResourceOwnerInterface
756756
*/
757-
abstract protected function createResourceOwner(array $response, AccessTokenInterface $token);
757+
abstract protected function createResourceOwner(array $response, AccessToken $token);
758758

759759
/**
760760
* Requests and returns the resource owner of given access token.
761761
*
762762
* @param AccessTokenInterface $token
763763
* @return ResourceOwnerInterface
764764
*/
765-
public function getResourceOwner(AccessTokenInterface $token)
765+
public function getResourceOwner(AccessToken $token)
766766
{
767767
$response = $this->fetchResourceOwnerDetails($token);
768768

@@ -772,10 +772,10 @@ public function getResourceOwner(AccessTokenInterface $token)
772772
/**
773773
* Requests resource owner details.
774774
*
775-
* @param AccessTokenInterface $token
775+
* @param AccessToken $token
776776
* @return mixed
777777
*/
778-
protected function fetchResourceOwnerDetails(AccessTokenInterface $token)
778+
protected function fetchResourceOwnerDetails(AccessToken $token)
779779
{
780780
$url = $this->getResourceOwnerDetailsUrl($token);
781781

src/Provider/GenericProvider.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
use InvalidArgumentException;
1818
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
19-
use League\OAuth2\Client\Token\AccessTokenInterface;
19+
use League\OAuth2\Client\Token\AccessToken;
2020
use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
2121
use Psr\Http\Message\ResponseInterface;
2222

@@ -168,7 +168,7 @@ public function getBaseAccessTokenUrl(array $params)
168168
/**
169169
* @inheritdoc
170170
*/
171-
public function getResourceOwnerDetailsUrl(AccessTokenInterface $token)
171+
public function getResourceOwnerDetailsUrl(AccessToken $token)
172172
{
173173
return $this->urlResourceOwnerDetails;
174174
}
@@ -226,7 +226,7 @@ protected function checkResponse(ResponseInterface $response, $data)
226226
/**
227227
* @inheritdoc
228228
*/
229-
protected function createResourceOwner(array $response, AccessTokenInterface $token)
229+
protected function createResourceOwner(array $response, AccessToken $token)
230230
{
231231
return new GenericResourceOwner($response, $this->responseResourceOwnerId);
232232
}

src/Tool/BearerAuthorizationTrait.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
namespace League\OAuth2\Client\Tool;
1616

17+
use League\OAuth2\Client\Token\AccessTokenInterface;
18+
1719
/**
1820
* Enables `Bearer` header authorization for providers.
1921
*
@@ -24,7 +26,7 @@ trait BearerAuthorizationTrait
2426
/**
2527
* Returns authorization headers for the 'bearer' grant.
2628
*
27-
* @param mixed|null $token Either a string or an access token instance
29+
* @param AccessTokenInterface|string|null $token Either a string or an access token instance
2830
* @return array
2931
*/
3032
protected function getAuthorizationHeaders($token = null)

src/Tool/MacAuthorizationTrait.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
namespace League\OAuth2\Client\Tool;
1616

17+
use League\OAuth2\Client\Token\AccessToken;
1718
use League\OAuth2\Client\Token\AccessTokenInterface;
1819

1920
/**
@@ -26,10 +27,10 @@ trait MacAuthorizationTrait
2627
/**
2728
* Returns the id of this token for MAC generation.
2829
*
29-
* @param AccessTokenInterface $token
30+
* @param AccessToken $token
3031
* @return string
3132
*/
32-
abstract protected function getTokenId(AccessTokenInterface $token);
33+
abstract protected function getTokenId(AccessToken $token);
3334

3435
/**
3536
* Returns the MAC signature for the current request.
@@ -53,16 +54,20 @@ abstract protected function getRandomState($length);
5354
/**
5455
* Returns the authorization headers for the 'mac' grant.
5556
*
56-
* @param AccessTokenInterface $token
57+
* @param AccessTokenInterface|string|null $token Either a string or an access token instance
5758
* @return array
5859
* @codeCoverageIgnore
5960
*
6061
* @todo This is currently untested and provided only as an example. If you
6162
* complete the implementation, please create a pull request for
6263
* https://github.com/thephpleague/oauth2-client
6364
*/
64-
protected function getAuthorizationHeaders($token)
65+
protected function getAuthorizationHeaders($token = null)
6566
{
67+
if ($token === null) {
68+
return [];
69+
}
70+
6671
$ts = time();
6772
$id = $this->getTokenId($token);
6873
$nonce = $this->getRandomState(16);

test/src/Provider/AbstractProviderTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -747,4 +747,36 @@ public function testDefaultAuthorizationHeaders()
747747

748748
$this->assertEquals([], $headers);
749749
}
750+
751+
/**
752+
* This test helps show the fatal errors occurring as a result of incompatible
753+
* method signatures after the 2.4.0 release.
754+
*
755+
* @link https://github.com/thephpleague/oauth2-client/issues/752
756+
*/
757+
public function testExtendedProviderDoesNotErrorWhenUsingAccessTokenAsTheTypeHint()
758+
{
759+
$token = new AccessToken([
760+
'access_token' => 'mock_access_token',
761+
'refresh_token' => 'mock_refresh_token',
762+
'expires' => time(),
763+
'resource_owner_id' => 'mock_resource_owner_id',
764+
]);
765+
766+
$provider = new Fake\ProviderWithAccessTokenHints([
767+
'urlAuthorize' => 'https://example.com/authorize',
768+
'urlAccessToken' => 'https://example.com/accessToken',
769+
'urlResourceOwnerDetails' => 'https://api.example.com/owner',
770+
]);
771+
772+
$reflectedProvider = new \ReflectionObject($provider);
773+
$getTokenId = $reflectedProvider->getMethod('getTokenId');
774+
$getTokenId->setAccessible(true);
775+
776+
$url = $provider->getResourceOwnerDetailsUrl($token);
777+
$tokenId = $getTokenId->invoke($provider, $token);
778+
779+
$this->assertSame('https://api.example.com/owner/mock_resource_owner_id', $url);
780+
$this->assertSame('fake_token_id', $tokenId);
781+
}
750782
}

test/src/Provider/Fake.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace League\OAuth2\Client\Test\Provider;
44

5-
use League\OAuth2\Client\Token\AccessTokenInterface;
5+
use League\OAuth2\Client\Token\AccessToken;
66
use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
77
use League\OAuth2\Client\Provider\AbstractProvider;
88
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
@@ -24,7 +24,7 @@ public function getBaseAccessTokenUrl(array $params)
2424
return 'http://example.com/oauth/token';
2525
}
2626

27-
public function getResourceOwnerDetailsUrl(AccessTokenInterface $token)
27+
public function getResourceOwnerDetailsUrl(AccessToken $token)
2828
{
2929
return 'http://example.com/oauth/user';
3030
}
@@ -44,7 +44,7 @@ public function getAccessTokenMethod()
4444
return $this->accessTokenMethod;
4545
}
4646

47-
protected function createResourceOwner(array $response, AccessTokenInterface $token)
47+
protected function createResourceOwner(array $response, AccessToken $token)
4848
{
4949
return new Fake\User($response);
5050
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace League\OAuth2\Client\Test\Provider\Fake;
4+
5+
use League\OAuth2\Client\Provider\GenericProvider;
6+
use League\OAuth2\Client\Provider\GenericResourceOwner;
7+
use League\OAuth2\Client\Token\AccessToken;
8+
use League\OAuth2\Client\Tool\MacAuthorizationTrait;
9+
10+
class ProviderWithAccessTokenHints extends GenericProvider
11+
{
12+
use MacAuthorizationTrait;
13+
14+
public function getResourceOwnerDetailsUrl(AccessToken $token)
15+
{
16+
return 'https://api.example.com/owner/' . $token->getResourceOwnerId();
17+
}
18+
19+
protected function createResourceOwner(array $response, AccessToken $token)
20+
{
21+
return new GenericResourceOwner($response, $token->getResourceOwnerId());
22+
}
23+
24+
public function getResourceOwner(AccessToken $token)
25+
{
26+
return $this->createResourceOwner([], $token);
27+
}
28+
29+
protected function fetchResourceOwnerDetails(AccessToken $token)
30+
{
31+
return [];
32+
}
33+
34+
protected function getTokenId(AccessToken $token)
35+
{
36+
return 'fake_token_id';
37+
}
38+
39+
protected function getMacSignature($id, $ts, $nonce)
40+
{
41+
return 'fake_mac_signature';
42+
}
43+
}

test/src/Provider/Generic.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace League\OAuth2\Client\Test\Provider;
44

5-
use League\OAuth2\Client\Token\AccessTokenInterface;
5+
use League\OAuth2\Client\Token\AccessToken;
66
use League\OAuth2\Client\Provider\GenericProvider;
77

88
class Generic extends GenericProvider
@@ -19,7 +19,7 @@ public function __construct($options = [], array $collaborators = [])
1919
parent::__construct($options);
2020
}
2121

22-
protected function fetchResourceOwnerDetails(AccessTokenInterface $token)
22+
protected function fetchResourceOwnerDetails(AccessToken $token)
2323
{
2424
return [
2525
'mock_response_uid' => 1,

0 commit comments

Comments
 (0)