mirror of
				https://github.com/elyby/oauth2-server.git
				synced 2025-05-31 14:12:07 +05:30 
			
		
		
		
	
		
			
				
	
	
		
			205 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace LeagueTests;
 | |
| 
 | |
| use League\OAuth2\Server\AuthorizationServer;
 | |
| use League\OAuth2\Server\CryptKey;
 | |
| use League\OAuth2\Server\Exception\OAuthServerException;
 | |
| use League\OAuth2\Server\Grant\AuthCodeGrant;
 | |
| use League\OAuth2\Server\Grant\ClientCredentialsGrant;
 | |
| use League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface;
 | |
| use League\OAuth2\Server\Repositories\AuthCodeRepositoryInterface;
 | |
| use League\OAuth2\Server\Repositories\ClientRepositoryInterface;
 | |
| use League\OAuth2\Server\Repositories\RefreshTokenRepositoryInterface;
 | |
| use League\OAuth2\Server\Repositories\ScopeRepositoryInterface;
 | |
| use League\OAuth2\Server\RequestTypes\AuthorizationRequest;
 | |
| use League\OAuth2\Server\ResponseTypes\BearerTokenResponse;
 | |
| use LeagueTests\Stubs\AccessTokenEntity;
 | |
| use LeagueTests\Stubs\AuthCodeEntity;
 | |
| use LeagueTests\Stubs\ClientEntity;
 | |
| use LeagueTests\Stubs\StubResponseType;
 | |
| use LeagueTests\Stubs\UserEntity;
 | |
| use Psr\Http\Message\ResponseInterface;
 | |
| use Zend\Diactoros\Response;
 | |
| use Zend\Diactoros\ServerRequest;
 | |
| use Zend\Diactoros\ServerRequestFactory;
 | |
| 
 | |
| class AuthorizationServerTest extends \PHPUnit_Framework_TestCase
 | |
| {
 | |
|     public function testRespondToRequestInvalidGrantType()
 | |
|     {
 | |
|         $server = new AuthorizationServer(
 | |
|             $this->getMockBuilder(ClientRepositoryInterface::class)->getMock(),
 | |
|             $this->getMockBuilder(AccessTokenRepositoryInterface::class)->getMock(),
 | |
|             $this->getMockBuilder(ScopeRepositoryInterface::class)->getMock(),
 | |
|             'file://' . __DIR__ . '/Stubs/private.key',
 | |
|             'file://' . __DIR__ . '/Stubs/public.key',
 | |
|             new StubResponseType()
 | |
|         );
 | |
| 
 | |
|         $server->enableGrantType(new ClientCredentialsGrant(), new \DateInterval('PT1M'));
 | |
| 
 | |
|         try {
 | |
|             $server->respondToAccessTokenRequest(ServerRequestFactory::fromGlobals(), new Response);
 | |
|         } catch (OAuthServerException $e) {
 | |
|             $this->assertEquals('unsupported_grant_type', $e->getErrorType());
 | |
|             $this->assertEquals(400, $e->getHttpStatusCode());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function testRespondToRequest()
 | |
|     {
 | |
|         $clientRepository = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock();
 | |
|         $clientRepository->method('getClientEntity')->willReturn(new ClientEntity());
 | |
| 
 | |
|         $scopeRepositoryMock = $this->getMockBuilder(ScopeRepositoryInterface::class)->getMock();
 | |
|         $scopeRepositoryMock->method('finalizeScopes')->willReturnArgument(0);
 | |
| 
 | |
|         $accessTokenRepositoryMock = $this->getMockBuilder(AccessTokenRepositoryInterface::class)->getMock();
 | |
|         $accessTokenRepositoryMock->method('getNewToken')->willReturn(new AccessTokenEntity());
 | |
| 
 | |
|         $server = new AuthorizationServer(
 | |
|             $clientRepository,
 | |
|             $accessTokenRepositoryMock,
 | |
|             $scopeRepositoryMock,
 | |
|             'file://' . __DIR__ . '/Stubs/private.key',
 | |
|             'file://' . __DIR__ . '/Stubs/public.key',
 | |
|             new StubResponseType()
 | |
|         );
 | |
| 
 | |
|         $server->enableGrantType(new ClientCredentialsGrant(), new \DateInterval('PT1M'));
 | |
| 
 | |
|         $_POST['grant_type'] = 'client_credentials';
 | |
|         $_POST['client_id'] = 'foo';
 | |
|         $_POST['client_secret'] = 'bar';
 | |
|         $response = $server->respondToAccessTokenRequest(ServerRequestFactory::fromGlobals(), new Response);
 | |
|         $this->assertEquals(200, $response->getStatusCode());
 | |
|     }
 | |
| 
 | |
|     public function testGetResponseType()
 | |
|     {
 | |
|         $clientRepository = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock();
 | |
| 
 | |
|         $server = new AuthorizationServer(
 | |
|             $clientRepository,
 | |
|             $this->getMockBuilder(AccessTokenRepositoryInterface::class)->getMock(),
 | |
|             $this->getMockBuilder(ScopeRepositoryInterface::class)->getMock(),
 | |
|             'file://' . __DIR__ . '/Stubs/private.key',
 | |
|             'file://' . __DIR__ . '/Stubs/public.key'
 | |
|         );
 | |
| 
 | |
|         $abstractGrantReflection = new \ReflectionClass($server);
 | |
|         $method = $abstractGrantReflection->getMethod('getResponseType');
 | |
|         $method->setAccessible(true);
 | |
| 
 | |
|         $this->assertTrue($method->invoke($server) instanceof BearerTokenResponse);
 | |
|     }
 | |
| 
 | |
|     public function testCompleteAuthorizationRequest()
 | |
|     {
 | |
|         $clientRepository = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock();
 | |
| 
 | |
|         $server = new AuthorizationServer(
 | |
|             $clientRepository,
 | |
|             $this->getMockBuilder(AccessTokenRepositoryInterface::class)->getMock(),
 | |
|             $this->getMockBuilder(ScopeRepositoryInterface::class)->getMock(),
 | |
|             'file://' . __DIR__ . '/Stubs/private.key',
 | |
|             'file://' . __DIR__ . '/Stubs/public.key'
 | |
|         );
 | |
| 
 | |
|         $authCodeRepository = $this->getMockBuilder(AuthCodeRepositoryInterface::class)->getMock();
 | |
|         $authCodeRepository->method('getNewAuthCode')->willReturn(new AuthCodeEntity());
 | |
| 
 | |
|         $grant = new AuthCodeGrant(
 | |
|             $authCodeRepository,
 | |
|             $this->getMockBuilder(RefreshTokenRepositoryInterface::class)->getMock(),
 | |
|             new \DateInterval('PT10M')
 | |
|         );
 | |
| 
 | |
|         $grant->setPrivateKey(new CryptKey('file://' . __DIR__ . '/Stubs/private.key'));
 | |
|         $grant->setPublicKey(new CryptKey('file://' . __DIR__ . '/Stubs/public.key'));
 | |
| 
 | |
|         $server->enableGrantType($grant);
 | |
| 
 | |
|         $authRequest = new AuthorizationRequest();
 | |
|         $authRequest->setAuthorizationApproved(true);
 | |
|         $authRequest->setClient(new ClientEntity());
 | |
|         $authRequest->setGrantTypeId('authorization_code');
 | |
|         $authRequest->setUser(new UserEntity());
 | |
| 
 | |
|         $this->assertTrue(
 | |
|             $server->completeAuthorizationRequest($authRequest, new Response) instanceof ResponseInterface
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function testValidateAuthorizationRequest()
 | |
|     {
 | |
|         $client = new ClientEntity();
 | |
|         $clientRepositoryMock = $this->getMockBuilder(ClientRepositoryInterface::class)->getMock();
 | |
|         $clientRepositoryMock->method('getClientEntity')->willReturn($client);
 | |
| 
 | |
|         $grant = new AuthCodeGrant(
 | |
|             $this->getMockBuilder(AuthCodeRepositoryInterface::class)->getMock(),
 | |
|             $this->getMockBuilder(RefreshTokenRepositoryInterface::class)->getMock(),
 | |
|             new \DateInterval('PT10M')
 | |
|         );
 | |
|         $grant->setClientRepository($clientRepositoryMock);
 | |
| 
 | |
|         $server = new AuthorizationServer(
 | |
|             $clientRepositoryMock,
 | |
|             $this->getMockBuilder(AccessTokenRepositoryInterface::class)->getMock(),
 | |
|             $this->getMockBuilder(ScopeRepositoryInterface::class)->getMock(),
 | |
|             'file://' . __DIR__ . '/Stubs/private.key',
 | |
|             'file://' . __DIR__ . '/Stubs/public.key'
 | |
|         );
 | |
|         $server->enableGrantType($grant);
 | |
| 
 | |
|         $request = new ServerRequest(
 | |
|             [],
 | |
|             [],
 | |
|             null,
 | |
|             null,
 | |
|             'php://input',
 | |
|             $headers = [],
 | |
|             $cookies = [],
 | |
|             $queryParams = [
 | |
|                 'response_type' => 'code',
 | |
|                 'client_id'     => 'foo',
 | |
|             ]
 | |
|         );
 | |
| 
 | |
|         $this->assertTrue($server->validateAuthorizationRequest($request) instanceof AuthorizationRequest);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @expectedException  \League\OAuth2\Server\Exception\OAuthServerException
 | |
|      * @expectedExceptionCode 2
 | |
|      */
 | |
|     public function testValidateAuthorizationRequestUnregistered()
 | |
|     {
 | |
|         $server = new AuthorizationServer(
 | |
|             $this->getMockBuilder(ClientRepositoryInterface::class)->getMock(),
 | |
|             $this->getMockBuilder(AccessTokenRepositoryInterface::class)->getMock(),
 | |
|             $this->getMockBuilder(ScopeRepositoryInterface::class)->getMock(),
 | |
|             'file://' . __DIR__ . '/Stubs/private.key',
 | |
|             'file://' . __DIR__ . '/Stubs/public.key'
 | |
|         );
 | |
| 
 | |
|         $request = new ServerRequest(
 | |
|             [],
 | |
|             [],
 | |
|             null,
 | |
|             null,
 | |
|             'php://input',
 | |
|             $headers = [],
 | |
|             $cookies = [],
 | |
|             $queryParams = [
 | |
|                 'response_type' => 'code',
 | |
|                 'client_id'     => 'foo',
 | |
|             ]
 | |
|         );
 | |
| 
 | |
|         $server->validateAuthorizationRequest($request);
 | |
|     }
 | |
| }
 |