minor improvements and documentation fixes

This commit is contained in:
Julián Gutiérrez 2016-01-20 10:36:16 +01:00
parent 1e1043c04f
commit 3e5889e93b
17 changed files with 37 additions and 54 deletions

View File

@ -15,7 +15,7 @@ class ScopeEntity implements ScopeEntityInterface
/** /**
* @inheritdoc * @inheritdoc
*/ */
function jsonSerialize() public function jsonSerialize()
{ {
return $this->getIdentifier(); return $this->getIdentifier();
} }

View File

@ -60,7 +60,8 @@ class OAuthServerException extends \Exception
$localizedHint = null $localizedHint = null
) { ) {
$errorMessage = (is_null($localizedError)) $errorMessage = (is_null($localizedError))
? 'The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.' ? 'The provided authorization grant is invalid, expired, revoked, does not match ' .
'the redirection URI used in the authorization request, or was issued to another client.'
: $localizedError; : $localizedError;
$hint = (is_null($localizedHint)) $hint = (is_null($localizedHint))
? 'Check the `grant_type` parameter' ? 'Check the `grant_type` parameter'
@ -106,7 +107,8 @@ class OAuthServerException extends \Exception
$localizedHint = null $localizedHint = null
) { ) {
$errorMessage = (is_null($localizedError)) $errorMessage = (is_null($localizedError))
? 'The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.' ? 'The request is missing a required parameter, includes an invalid parameter value, ' .
'includes a parameter more than once, or is otherwise malformed.'
: $localizedError; : $localizedError;
$hint = (is_null($localizedHint)) $hint = (is_null($localizedHint))
? sprintf('Check the `%s` parameter', $parameter) ? sprintf('Check the `%s` parameter', $parameter)

View File

@ -11,7 +11,7 @@
namespace League\OAuth2\Server\Grant; namespace League\OAuth2\Server\Grant;
use League\Event\EmitterInterface; use League\Event\EmitterAwareTrait;
use League\Event\Event; use League\Event\Event;
use League\OAuth2\Server\Entities\AccessTokenEntity; use League\OAuth2\Server\Entities\AccessTokenEntity;
use League\OAuth2\Server\Entities\Interfaces\ClientEntityInterface; use League\OAuth2\Server\Entities\Interfaces\ClientEntityInterface;
@ -29,6 +29,8 @@ use Psr\Http\Message\ServerRequestInterface;
*/ */
abstract class AbstractGrant implements GrantTypeInterface abstract class AbstractGrant implements GrantTypeInterface
{ {
use EmitterAwareTrait;
const SCOPE_DELIMITER_STRING = ' '; const SCOPE_DELIMITER_STRING = ' ';
/** /**
@ -60,11 +62,6 @@ abstract class AbstractGrant implements GrantTypeInterface
*/ */
protected $accessTokenRepository; protected $accessTokenRepository;
/**
* @var \League\Event\Emitter
*/
protected $emitter;
/** /**
* @var ScopeRepositoryInterface * @var ScopeRepositoryInterface
*/ */
@ -120,14 +117,6 @@ abstract class AbstractGrant implements GrantTypeInterface
$this->pathToPublicKey = $pathToPublicKey; $this->pathToPublicKey = $pathToPublicKey;
} }
/**
* @inheritdoc
*/
public function setEmitter(EmitterInterface $emitter)
{
$this->emitter = $emitter;
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -179,7 +168,7 @@ abstract class AbstractGrant implements GrantTypeInterface
); );
if (!$client instanceof ClientEntityInterface) { if (!$client instanceof ClientEntityInterface) {
$this->emitter->emit(new Event('client.authentication.failed', $request)); $this->getEmitter()->emit(new Event('client.authentication.failed', $request));
throw OAuthServerException::invalidClient(); throw OAuthServerException::invalidClient();
} }

View File

@ -12,7 +12,7 @@
namespace League\OAuth2\Server\Grant; namespace League\OAuth2\Server\Grant;
use DateInterval; use DateInterval;
use League\Event\EmitterInterface; use League\Event\EmitterAwareInterface;
use League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface; use League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface;
use League\OAuth2\Server\Repositories\ClientRepositoryInterface; use League\OAuth2\Server\Repositories\ClientRepositoryInterface;
use League\OAuth2\Server\Repositories\ScopeRepositoryInterface; use League\OAuth2\Server\Repositories\ScopeRepositoryInterface;
@ -22,7 +22,7 @@ use Psr\Http\Message\ServerRequestInterface;
/** /**
* Grant type interface * Grant type interface
*/ */
interface GrantTypeInterface interface GrantTypeInterface extends EmitterAwareInterface
{ {
/** /**
* Return the identifier * Return the identifier
@ -67,13 +67,6 @@ interface GrantTypeInterface
*/ */
public function canRespondToRequest(ServerRequestInterface $request); public function canRespondToRequest(ServerRequestInterface $request);
/**
* Set the event emitter
*
* @param \League\Event\EmitterInterface $emitter
*/
public function setEmitter(EmitterInterface $emitter);
/** /**
* Set the client repository * Set the client repository
* *

View File

@ -100,7 +100,7 @@ class PasswordGrant extends AbstractGrant
$user = $this->userRepository->getUserEntityByUserCredentials($username, $password); $user = $this->userRepository->getUserEntityByUserCredentials($username, $password);
if (!$user instanceof UserEntityInterface) { if (!$user instanceof UserEntityInterface) {
$this->emitter->emit(new Event('user.authentication.failed', $request)); $this->getEmitter()->emit(new Event('user.authentication.failed', $request));
throw OAuthServerException::invalidCredentials(); throw OAuthServerException::invalidCredentials();
} }

View File

@ -38,9 +38,8 @@ class RefreshTokenGrant extends AbstractGrant
/** /**
* @param \League\OAuth2\Server\Repositories\RefreshTokenRepositoryInterface $refreshTokenRepository * @param \League\OAuth2\Server\Repositories\RefreshTokenRepositoryInterface $refreshTokenRepository
*/ */
public function __construct( public function __construct(RefreshTokenRepositoryInterface $refreshTokenRepository)
RefreshTokenRepositoryInterface $refreshTokenRepository {
) {
$this->refreshTokenRepository = $refreshTokenRepository; $this->refreshTokenRepository = $refreshTokenRepository;
} }
@ -64,7 +63,7 @@ class RefreshTokenGrant extends AbstractGrant
// the request doesn't include any new scopes // the request doesn't include any new scopes
foreach ($scopes as $scope) { foreach ($scopes as $scope) {
if (in_array($scope->getIdentifier(), $oldRefreshToken['scopes']) === false) { if (in_array($scope->getIdentifier(), $oldRefreshToken['scopes']) === false) {
$this->emitter->emit(new Event('scope.selection.failed', $request)); $this->getEmitter()->emit(new Event('scope.selection.failed', $request));
throw OAuthServerException::invalidScope($scope->getIdentifier()); throw OAuthServerException::invalidScope($scope->getIdentifier());
} }
@ -112,7 +111,7 @@ class RefreshTokenGrant extends AbstractGrant
$refreshTokenData = json_decode($refreshToken, true); $refreshTokenData = json_decode($refreshToken, true);
if ($refreshTokenData['client_id'] !== $clientId) { if ($refreshTokenData['client_id'] !== $clientId) {
$this->emitter->emit(new Event('refresh_token.client.failed', $request)); $this->getEmitter()->emit(new Event('refresh_token.client.failed', $request));
throw OAuthServerException::invalidRefreshToken( throw OAuthServerException::invalidRefreshToken(
'Token is not linked to client,' . 'Token is not linked to client,' .

View File

@ -33,8 +33,6 @@ interface AuthCodeRepositoryInterface extends RepositoryInterface
* @param string $code The authorization code string * @param string $code The authorization code string
* @param integer $expireTime Token expire time * @param integer $expireTime Token expire time
* @param string $redirectUri Client redirect uri * @param string $redirectUri Client redirect uri
*
* @return void
*/ */
public function persistNewAuthCode($code, $expireTime, $redirectUri); public function persistNewAuthCode($code, $expireTime, $redirectUri);

View File

@ -20,11 +20,11 @@ interface ClientRepositoryInterface extends RepositoryInterface
* Get a client * Get a client
* *
* @param string $clientIdentifier The client's identifier * @param string $clientIdentifier The client's identifier
* @param string|null $clientSecret The client's secret * @param string $clientSecret The client's secret
* @param string|null $redirectUri The client's redirect URI * @param string|null $redirectUri The client's redirect URI
* @param string|null $grantType The grant type used * @param string|null $grantType The grant type used
* *
* @return \League\OAuth2\Server\Entities\Interfaces\ClientEntityInterface * @return \League\OAuth2\Server\Entities\Interfaces\ClientEntityInterface
*/ */
public function getClientEntity($clientIdentifier, $grantType, $clientSecret = null, $redirectUri = null); public function getClientEntity($clientIdentifier, $clientSecret, $redirectUri = null, $grantType = null);
} }

View File

@ -13,7 +13,6 @@ namespace League\OAuth2\Server\Storage;
use League\OAuth2\Server\Repositories\RepositoryInterface; use League\OAuth2\Server\Repositories\RepositoryInterface;
/** /**
* MacTokenInterface * MacTokenInterface
*/ */
@ -21,15 +20,17 @@ interface MacTokenInterface extends RepositoryInterface
{ {
/** /**
* Create a MAC key linked to an access token * Create a MAC key linked to an access token
*
* @param string $macKey * @param string $macKey
* @param string $accessToken * @param string $accessToken
* @return void
*/ */
public function persistMacTokenEntity($macKey, $accessToken); public function persistMacTokenEntity($macKey, $accessToken);
/** /**
* Get a MAC key by access token * Get a MAC key by access token
*
* @param string $accessToken * @param string $accessToken
*
* @return string * @return string
*/ */
public function getMacKeyByAccessTokenString($accessToken); public function getMacKeyByAccessTokenString($accessToken);

View File

@ -21,9 +21,9 @@ interface RefreshTokenRepositoryInterface extends RepositoryInterface
/** /**
* Create a new refresh token_name * Create a new refresh token_name
* *
* @param \League\OAuth2\Server\Entities\Interfaces\RefreshTokenEntityInterface $refreshTokenEntityInterface * @param \League\OAuth2\Server\Entities\Interfaces\RefreshTokenEntityInterface $refreshTokenEntity
*/ */
public function persistNewRefreshToken(RefreshTokenEntityInterface $refreshTokenEntityInterface); public function persistNewRefreshToken(RefreshTokenEntityInterface $refreshTokenEntity);
/** /**
* Revoke the refresh token * Revoke the refresh token

View File

@ -21,7 +21,7 @@ interface ScopeRepositoryInterface extends RepositoryInterface
* *
* @param string $identifier The scope identifier * @param string $identifier The scope identifier
* @param string $grantType The grant type used in the request * @param string $grantType The grant type used in the request
* @param string $clientId The client sending the request * @param string|null $clientId The client sending the request
* *
* @return \League\OAuth2\Server\Entities\Interfaces\ScopeEntityInterface * @return \League\OAuth2\Server\Entities\Interfaces\ScopeEntityInterface
*/ */

View File

@ -28,12 +28,14 @@ class BearerTokenResponse extends AbstractResponseType
*/ */
public function generateHttpResponse(ResponseInterface $response) public function generateHttpResponse(ResponseInterface $response)
{ {
$expireDateTime = $this->accessToken->getExpiryDateTime()->getTimestamp();
$jwtAccessToken = (new Builder()) $jwtAccessToken = (new Builder())
->setAudience($this->accessToken->getClient()->getIdentifier()) ->setAudience($this->accessToken->getClient()->getIdentifier())
->setId($this->accessToken->getIdentifier(), true) ->setId($this->accessToken->getIdentifier(), true)
->setIssuedAt(time()) ->setIssuedAt(time())
->setNotBefore(time()) ->setNotBefore(time())
->setExpiration($this->accessToken->getExpiryDateTime()->getTimestamp()) ->setExpiration($expireDateTime)
->setSubject($this->accessToken->getUserIdentifier()) ->setSubject($this->accessToken->getUserIdentifier())
->set('scopes', $this->accessToken->getScopes()) ->set('scopes', $this->accessToken->getScopes())
->sign(new Sha256(), new Key($this->pathToPrivateKey)) ->sign(new Sha256(), new Key($this->pathToPrivateKey))
@ -41,7 +43,7 @@ class BearerTokenResponse extends AbstractResponseType
$responseParams = [ $responseParams = [
'token_type' => 'Bearer', 'token_type' => 'Bearer',
'expires_in' => $this->accessToken->getExpiryDateTime()->getTimestamp() - (new \DateTime())->getTimestamp(), 'expires_in' => $expireDateTime - (new \DateTime)->getTimestamp(),
'access_token' => (string) $jwtAccessToken, 'access_token' => (string) $jwtAccessToken,
]; ];
@ -54,7 +56,7 @@ class BearerTokenResponse extends AbstractResponseType
'access_token_id' => $this->accessToken->getIdentifier(), 'access_token_id' => $this->accessToken->getIdentifier(),
'scopes' => $this->accessToken->getScopes(), 'scopes' => $this->accessToken->getScopes(),
'user_id' => $this->accessToken->getUserIdentifier(), 'user_id' => $this->accessToken->getUserIdentifier(),
'expire_time' => $this->refreshToken->getExpiryDateTime()->getTimestamp(), 'expire_time' => $expireDateTime,
] ]
), ),
$this->pathToPrivateKey $this->pathToPrivateKey

View File

@ -2,7 +2,6 @@
namespace League\OAuth2\Server; namespace League\OAuth2\Server;
use DateInterval;
use League\Event\EmitterAwareInterface; use League\Event\EmitterAwareInterface;
use League\Event\EmitterAwareTrait; use League\Event\EmitterAwareTrait;
use League\OAuth2\Server\Exception\OAuthServerException; use League\OAuth2\Server\Exception\OAuthServerException;