Change tests to use validClient instead of getClientEntity

This commit is contained in:
sephster 2018-09-01 14:26:22 +01:00
parent 46c2f99b06
commit 060a090479
No known key found for this signature in database
GPG Key ID: 077754CA23023F4F
5 changed files with 30 additions and 20 deletions

View File

@ -174,27 +174,24 @@ abstract class AbstractGrant implements GrantTypeInterface
list($basicAuthUser, $basicAuthPassword) = $this->getBasicAuthCredentials($request); list($basicAuthUser, $basicAuthPassword) = $this->getBasicAuthCredentials($request);
$clientId = $this->getRequestParameter('client_id', $request, $basicAuthUser); $clientId = $this->getRequestParameter('client_id', $request, $basicAuthUser);
if (is_null($clientId)) { if (is_null($clientId)) {
throw OAuthServerException::invalidRequest('client_id'); throw OAuthServerException::invalidRequest('client_id');
} }
// If the client is confidential require the client secret
$clientSecret = $this->getRequestParameter('client_secret', $request, $basicAuthPassword); $clientSecret = $this->getRequestParameter('client_secret', $request, $basicAuthPassword);
$client = $this->clientRepository->getClientEntity( if ($this->clientRepository->validateClient($clientId, $clientSecret) === false) {
$clientId,
$this->getIdentifier(),
$clientSecret,
true
);
if ($client instanceof ClientEntityInterface === false) {
$this->getEmitter()->emit(new RequestEvent(RequestEvent::CLIENT_AUTHENTICATION_FAILED, $request)); $this->getEmitter()->emit(new RequestEvent(RequestEvent::CLIENT_AUTHENTICATION_FAILED, $request));
throw OAuthServerException::invalidClient($request); throw OAuthServerException::invalidClient($request);
} }
$client = $this->clientRepository->getClientEntity($clientId);
// If a redirect URI is provided ensure it matches what is pre-registered // If a redirect URI is provided ensure it matches what is pre-registered
$redirectUri = $this->getRequestParameter('redirect_uri', $request, null); $redirectUri = $this->getRequestParameter('redirect_uri', $request, null);
if ($redirectUri !== null) { if ($redirectUri !== null) {
$this->validateRedirectUri($redirectUri, $client, $request); $this->validateRedirectUri($redirectUri, $client, $request);
} }

View File

@ -20,14 +20,10 @@ 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 null|string $grantType The grant type used (if sent)
* @param null|string $clientSecret The client's secret (if sent)
* @param bool $mustValidateSecret If true the client must attempt to validate the secret if the client
* is confidential
* *
* @return ClientEntityInterface * @return ClientEntityInterface
*/ */
public function getClientEntity($clientIdentifier, $grantType = null, $clientSecret = null, $mustValidateSecret = true); public function getClientEntity($clientIdentifier);
/** /**
* Check if a client is confidential. * Check if a client is confidential.
@ -37,4 +33,21 @@ interface ClientRepositoryInterface extends RepositoryInterface
* @return bool * @return bool
*/ */
public function isClientConfidential($clientIdentifier); public function isClientConfidential($clientIdentifier);
/**
* Validate a client's secret.
*
* @param string $clientIdentifier The client's identifier
* @param null|string $clientSecret The client's secret (if sent)
*
* @return bool
*/
public function validateClient($clientIdentifier, $clientSecret);
/**
* Check if a client can use a grant type.
*
* @return bool
*/
public function canUseGrant($clientIdentifier, $grantType);
} }

View File

@ -52,7 +52,7 @@ class OAuthServerExceptionTest extends TestCase
private function issueInvalidClientException($serverRequest) private function issueInvalidClientException($serverRequest)
{ {
$clientRepositoryMock = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock(); $clientRepositoryMock = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock();
$clientRepositoryMock->method('getClientEntity')->willReturn(false); $clientRepositoryMock->method('validateClient')->willReturn(false);
$grantMock = $this->getMockForAbstractClass(AbstractGrant::class); $grantMock = $this->getMockForAbstractClass(AbstractGrant::class);
$grantMock->setClientRepository($clientRepositoryMock); $grantMock->setClientRepository($clientRepositoryMock);

View File

@ -175,7 +175,7 @@ class AbstractGrantTest extends TestCase
public function testValidateClientMissingClientSecret() public function testValidateClientMissingClientSecret()
{ {
$clientRepositoryMock = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock(); $clientRepositoryMock = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock();
$clientRepositoryMock->method('getClientEntity')->willReturn(null); $clientRepositoryMock->method('validateClient')->willReturn(false);
/** @var AbstractGrant $grantMock */ /** @var AbstractGrant $grantMock */
$grantMock = $this->getMockForAbstractClass(AbstractGrant::class); $grantMock = $this->getMockForAbstractClass(AbstractGrant::class);
@ -200,7 +200,7 @@ class AbstractGrantTest extends TestCase
public function testValidateClientInvalidClientSecret() public function testValidateClientInvalidClientSecret()
{ {
$clientRepositoryMock = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock(); $clientRepositoryMock = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock();
$clientRepositoryMock->method('getClientEntity')->willReturn(null); $clientRepositoryMock->method('validateClient')->willReturn(false);
/** @var AbstractGrant $grantMock */ /** @var AbstractGrant $grantMock */
$grantMock = $this->getMockForAbstractClass(AbstractGrant::class); $grantMock = $this->getMockForAbstractClass(AbstractGrant::class);
@ -282,7 +282,7 @@ class AbstractGrantTest extends TestCase
public function testValidateClientBadClient() public function testValidateClientBadClient()
{ {
$clientRepositoryMock = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock(); $clientRepositoryMock = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock();
$clientRepositoryMock->method('getClientEntity')->willReturn(null); $clientRepositoryMock->method('validateClient')->willReturn(false);
/** @var AbstractGrant $grantMock */ /** @var AbstractGrant $grantMock */
$grantMock = $this->getMockForAbstractClass(AbstractGrant::class); $grantMock = $this->getMockForAbstractClass(AbstractGrant::class);

View File

@ -66,7 +66,7 @@ class AuthorizationServerMiddlewareTest extends TestCase
public function testOAuthErrorResponse() public function testOAuthErrorResponse()
{ {
$clientRepository = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock(); $clientRepository = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock();
$clientRepository->method('getClientEntity')->willReturn(null); $clientRepository->method('validateClient')->willReturn(false);
$server = new AuthorizationServer( $server = new AuthorizationServer(
$clientRepository, $clientRepository,