sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							573 lines
						
					
					
						
							15 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							573 lines
						
					
					
						
							15 KiB
						
					
					
				| <?php | |
| /** | |
|  * This file is part of Lcobucci\JWT, a simple library to handle JWT and JWS | |
|  * | |
|  * @license http://opensource.org/licenses/BSD-3-Clause BSD-3-Clause | |
|  */ | |
| 
 | |
| namespace Lcobucci\JWT; | |
| 
 | |
| use DateInterval; | |
| use DateTime; | |
| use Lcobucci\JWT\Claim\Basic; | |
| use Lcobucci\JWT\Claim\EqualsTo; | |
| use Lcobucci\JWT\Claim\GreaterOrEqualsTo; | |
| use Lcobucci\JWT\Claim\LesserOrEqualsTo; | |
| 
 | |
| /** | |
|  * @author Luís Otávio Cobucci Oblonczyk <lcobucci@gmail.com> | |
|  * @since 0.1.0 | |
|  */ | |
| class TokenTest extends \PHPUnit\Framework\TestCase | |
| { | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers Lcobucci\JWT\Token::__construct | |
|      */ | |
|     public function constructMustInitializeAnEmptyPlainTextTokenWhenNoArgumentsArePassed() | |
|     { | |
|         $token = new Token(); | |
| 
 | |
|         $this->assertAttributeEquals(['alg' => 'none'], 'headers', $token); | |
|         $this->assertAttributeEquals([], 'claims', $token); | |
|         $this->assertAttributeEquals(null, 'signature', $token); | |
|         $this->assertAttributeEquals(['', ''], 'payload', $token); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * | |
|      * @covers Lcobucci\JWT\Token::hasHeader | |
|      */ | |
|     public function hasHeaderMustReturnTrueWhenItIsConfigured() | |
|     { | |
|         $token = new Token(['test' => 'testing']); | |
| 
 | |
|         $this->assertTrue($token->hasHeader('test')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * | |
|      * @covers Lcobucci\JWT\Token::hasHeader | |
|      */ | |
|     public function hasHeaderMustReturnFalseWhenItIsNotConfigured() | |
|     { | |
|         $token = new Token(['test' => 'testing']); | |
| 
 | |
|         $this->assertFalse($token->hasHeader('testing')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::hasHeader | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getHeader | |
|      * | |
|      * @expectedException \OutOfBoundsException | |
|      */ | |
|     public function getHeaderMustRaiseExceptionWhenHeaderIsNotConfigured() | |
|     { | |
|         $token = new Token(['test' => 'testing']); | |
| 
 | |
|         $token->getHeader('testing'); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::hasHeader | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getHeader | |
|      */ | |
|     public function getHeaderMustReturnTheDefaultValueWhenIsNotConfigured() | |
|     { | |
|         $token = new Token(['test' => 'testing']); | |
| 
 | |
|         $this->assertEquals('blah', $token->getHeader('testing', 'blah')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::hasHeader | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getHeader | |
|      * @covers Lcobucci\JWT\Token::getHeaderValue | |
|      */ | |
|     public function getHeaderMustReturnTheRequestedHeader() | |
|     { | |
|         $token = new Token(['test' => 'testing']); | |
| 
 | |
|         $this->assertEquals('testing', $token->getHeader('test')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::hasHeader | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getHeader | |
|      * @covers Lcobucci\JWT\Token::getHeaderValue | |
|      */ | |
|     public function getHeaderMustReturnValueWhenItIsAReplicatedClaim() | |
|     { | |
|         $token = new Token(['jti' => new EqualsTo('jti', 1)]); | |
| 
 | |
|         $this->assertEquals(1, $token->getHeader('jti')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getHeaders | |
|      */ | |
|     public function getHeadersMustReturnTheConfiguredHeader() | |
|     { | |
|         $token = new Token(['test' => 'testing']); | |
| 
 | |
|         $this->assertEquals(['test' => 'testing'], $token->getHeaders()); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getClaims | |
|      */ | |
|     public function getClaimsMustReturnTheConfiguredClaims() | |
|     { | |
|         $token = new Token([], ['test' => 'testing']); | |
| 
 | |
|         $this->assertEquals(['test' => 'testing'], $token->getClaims()); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * | |
|      * @covers Lcobucci\JWT\Token::hasClaim | |
|      */ | |
|     public function hasClaimMustReturnTrueWhenItIsConfigured() | |
|     { | |
|         $token = new Token([], ['test' => new Basic('test', 'testing')]); | |
| 
 | |
|         $this->assertTrue($token->hasClaim('test')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * | |
|      * @covers Lcobucci\JWT\Token::hasClaim | |
|      */ | |
|     public function hasClaimMustReturnFalseWhenItIsNotConfigured() | |
|     { | |
|         $token = new Token([], ['test' => new Basic('test', 'testing')]); | |
| 
 | |
|         $this->assertFalse($token->hasClaim('testing')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::hasClaim | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getClaim | |
|      */ | |
|     public function getClaimMustReturnTheDefaultValueWhenIsNotConfigured() | |
|     { | |
|         $token = new Token([], ['test' => new Basic('test', 'testing')]); | |
| 
 | |
|         $this->assertEquals('blah', $token->getClaim('testing', 'blah')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::hasClaim | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getClaim | |
|      * | |
|      * @expectedException \OutOfBoundsException | |
|      */ | |
|     public function getClaimShouldRaiseExceptionWhenClaimIsNotConfigured() | |
|     { | |
|         $token = new Token(); | |
|         $token->getClaim('testing'); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::hasClaim | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getClaim | |
|      */ | |
|     public function getClaimShouldReturnTheClaimValueWhenItExists() | |
|     { | |
|         $token = new Token([], ['testing' => new Basic('testing', 'test')]); | |
| 
 | |
|         $this->assertEquals('test', $token->getClaim('testing')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * | |
|      * @covers Lcobucci\JWT\Token::verify | |
|      * | |
|      * @expectedException BadMethodCallException | |
|      */ | |
|     public function verifyMustRaiseExceptionWhenTokenIsUnsigned() | |
|     { | |
|         $signer = $this->createMock(Signer::class); | |
| 
 | |
|         $token = new Token(); | |
|         $token->verify($signer, 'test'); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * | |
|      * @covers Lcobucci\JWT\Token::verify | |
|      * @covers Lcobucci\JWT\Token::getPayload | |
|      */ | |
|     public function verifyShouldReturnFalseWhenTokenAlgorithmIsDifferent() | |
|     { | |
|         $signer = $this->createMock(Signer::class); | |
|         $signature = $this->createMock(Signature::class, [], [], '', false); | |
| 
 | |
|         $signer->expects($this->any()) | |
|                ->method('getAlgorithmId') | |
|                ->willReturn('HS256'); | |
| 
 | |
|         $signature->expects($this->never()) | |
|                   ->method('verify'); | |
| 
 | |
|         $token = new Token(['alg' => 'RS256'], [], $signature); | |
| 
 | |
|         $this->assertFalse($token->verify($signer, 'test')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * | |
|      * @covers Lcobucci\JWT\Token::verify | |
|      * @covers Lcobucci\JWT\Token::getPayload | |
|      */ | |
|     public function verifyMustDelegateTheValidationToSignature() | |
|     { | |
|         $signer = $this->createMock(Signer::class); | |
|         $signature = $this->createMock(Signature::class, [], [], '', false); | |
| 
 | |
|         $signer->expects($this->any()) | |
|                ->method('getAlgorithmId') | |
|                ->willReturn('HS256'); | |
| 
 | |
|         $signature->expects($this->once()) | |
|                   ->method('verify') | |
|                   ->with($signer, $this->isType('string'), 'test') | |
|                   ->willReturn(true); | |
| 
 | |
|         $token = new Token(['alg' => 'HS256'], [], $signature); | |
| 
 | |
|         $this->assertTrue($token->verify($signer, 'test')); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\ValidationData::__construct | |
|      * @uses Lcobucci\JWT\ValidationData::setCurrentTime | |
|      * | |
|      * @covers Lcobucci\JWT\Token::validate | |
|      * @covers Lcobucci\JWT\Token::getValidatableClaims | |
|      */ | |
|     public function validateShouldReturnTrueWhenClaimsAreEmpty() | |
|     { | |
|         $token = new Token(); | |
| 
 | |
|         $this->assertTrue($token->validate(new ValidationData())); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\ValidationData::__construct | |
|      * @uses Lcobucci\JWT\ValidationData::setCurrentTime | |
|      * @uses Lcobucci\JWT\Claim\Basic::__construct | |
|      * | |
|      * @covers Lcobucci\JWT\Token::validate | |
|      * @covers Lcobucci\JWT\Token::getValidatableClaims | |
|      */ | |
|     public function validateShouldReturnTrueWhenThereAreNoValidatableClaims() | |
|     { | |
|         $token = new Token([], ['testing' => new Basic('testing', 'test')]); | |
| 
 | |
|         $this->assertTrue($token->validate(new ValidationData())); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\ValidationData | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * @uses Lcobucci\JWT\Claim\EqualsTo | |
|      * | |
|      * @covers Lcobucci\JWT\Token::validate | |
|      * @covers Lcobucci\JWT\Token::getValidatableClaims | |
|      */ | |
|     public function validateShouldReturnFalseWhenThereIsAtLeastOneFailedValidatableClaim() | |
|     { | |
|         $token = new Token( | |
|             [], | |
|             [ | |
|                 'iss' => new EqualsTo('iss', 'test'), | |
|                 'testing' => new Basic('testing', 'test') | |
|             ] | |
|         ); | |
| 
 | |
|         $data = new ValidationData(); | |
|         $data->setIssuer('test1'); | |
| 
 | |
|         $this->assertFalse($token->validate($data)); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\ValidationData | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * @uses Lcobucci\JWT\Claim\EqualsTo | |
|      * @uses Lcobucci\JWT\Claim\LesserOrEqualsTo | |
|      * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo | |
|      * | |
|      * @covers Lcobucci\JWT\Token::validate | |
|      * @covers Lcobucci\JWT\Token::getValidatableClaims | |
|      */ | |
|     public function validateShouldReturnFalseWhenATimeBasedClaimFails() | |
|     { | |
|         $now = time(); | |
| 
 | |
|         $token = new Token( | |
|             [], | |
|             [ | |
|                 'iss' => new EqualsTo('iss', 'test'), | |
|                 'iat' => new LesserOrEqualsTo('iat', $now), | |
|                 'nbf' => new LesserOrEqualsTo('nbf', $now + 20), | |
|                 'exp' => new GreaterOrEqualsTo('exp', $now + 500), | |
|                 'testing' => new Basic('testing', 'test') | |
|             ] | |
|         ); | |
| 
 | |
|         $data = new ValidationData($now + 10); | |
|         $data->setIssuer('test'); | |
| 
 | |
|         $this->assertFalse($token->validate($data)); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\ValidationData | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * @uses Lcobucci\JWT\Claim\EqualsTo | |
|      * @uses Lcobucci\JWT\Claim\LesserOrEqualsTo | |
|      * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo | |
|      * | |
|      * @covers Lcobucci\JWT\Token::validate | |
|      * @covers Lcobucci\JWT\Token::getValidatableClaims | |
|      */ | |
|     public function validateShouldReturnTrueWhenThereAreNoFailedValidatableClaims() | |
|     { | |
|         $now = time(); | |
| 
 | |
|         $token = new Token( | |
|             [], | |
|             [ | |
|                 'iss' => new EqualsTo('iss', 'test'), | |
|                 'iat' => new LesserOrEqualsTo('iat', $now), | |
|                 'exp' => new GreaterOrEqualsTo('exp', $now + 500), | |
|                 'testing' => new Basic('testing', 'test') | |
|             ] | |
|         ); | |
| 
 | |
|         $data = new ValidationData($now + 10); | |
|         $data->setIssuer('test'); | |
| 
 | |
|         $this->assertTrue($token->validate($data)); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\ValidationData | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * @uses Lcobucci\JWT\Claim\EqualsTo | |
|      * @uses Lcobucci\JWT\Claim\LesserOrEqualsTo | |
|      * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo | |
|      * | |
|      * @covers Lcobucci\JWT\Token::validate | |
|      * @covers Lcobucci\JWT\Token::getValidatableClaims | |
|      */ | |
|     public function validateShouldReturnTrueWhenLeewayMakesAllTimeBasedClaimsTrueAndOtherClaimsAreTrue() | |
|     { | |
|         $now = time(); | |
| 
 | |
|         $token = new Token( | |
|             [], | |
|             [ | |
|                 'iss' => new EqualsTo('iss', 'test'), | |
|                 'iat' => new LesserOrEqualsTo('iat', $now), | |
|                 'nbf' => new LesserOrEqualsTo('nbf', $now + 20), | |
|                 'exp' => new GreaterOrEqualsTo('exp', $now + 500), | |
|                 'testing' => new Basic('testing', 'test') | |
|             ] | |
|         ); | |
| 
 | |
|         $data = new ValidationData($now + 10, 20); | |
|         $data->setIssuer('test'); | |
| 
 | |
|         $this->assertTrue($token->validate($data)); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers Lcobucci\JWT\Token::isExpired | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::getClaim | |
|      * @uses Lcobucci\JWT\Token::hasClaim | |
|      */ | |
|     public function isExpiredShouldReturnFalseWhenTokenDoesNotExpires() | |
|     { | |
|         $token = new Token(['alg' => 'none']); | |
| 
 | |
|         $this->assertFalse($token->isExpired()); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers Lcobucci\JWT\Token::isExpired | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::getClaim | |
|      * @uses Lcobucci\JWT\Token::hasClaim | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo | |
|      */ | |
|     public function isExpiredShouldReturnFalseWhenTokenIsNotExpired() | |
|     { | |
|         $token = new Token( | |
|             ['alg' => 'none'], | |
|             ['exp' => new GreaterOrEqualsTo('exp', time() + 500)] | |
|         ); | |
| 
 | |
|         $this->assertFalse($token->isExpired()); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @covers Lcobucci\JWT\Token::isExpired | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::getClaim | |
|      * @uses Lcobucci\JWT\Token::hasClaim | |
|      * @uses Lcobucci\JWT\Claim\Basic | |
|      * @uses Lcobucci\JWT\Claim\GreaterOrEqualsTo | |
|      */ | |
|     public function isExpiredShouldReturnTrueAfterTokenExpires() | |
|     { | |
|         $token = new Token( | |
|             ['alg' => 'none'], | |
|             ['exp' => new GreaterOrEqualsTo('exp', time())] | |
|         ); | |
| 
 | |
|         $this->assertTrue($token->isExpired(new DateTime('+10 days'))); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * | |
|      * @covers Lcobucci\JWT\Token::getPayload | |
|      */ | |
|     public function getPayloadShouldReturnAStringWithTheTwoEncodePartsThatGeneratedTheToken() | |
|     { | |
|         $token = new Token(['alg' => 'none'], [], null, ['test1', 'test2', 'test3']); | |
| 
 | |
|         $this->assertEquals('test1.test2', $token->getPayload()); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::getPayload | |
|      * | |
|      * @covers Lcobucci\JWT\Token::__toString | |
|      */ | |
|     public function toStringMustReturnEncodedDataWithEmptySignature() | |
|     { | |
|         $token = new Token(['alg' => 'none'], [], null, ['test', 'test']); | |
| 
 | |
|         $this->assertEquals('test.test.', (string) $token); | |
|     } | |
| 
 | |
|     /** | |
|      * @test | |
|      * | |
|      * @uses Lcobucci\JWT\Token::__construct | |
|      * @uses Lcobucci\JWT\Token::getPayload | |
|      * | |
|      * @covers Lcobucci\JWT\Token::__toString | |
|      */ | |
|     public function toStringMustReturnEncodedData() | |
|     { | |
|         $signature = $this->createMock(Signature::class, [], [], '', false); | |
| 
 | |
|         $token = new Token(['alg' => 'none'], [], $signature, ['test', 'test', 'test']); | |
| 
 | |
|         $this->assertEquals('test.test.test', (string) $token); | |
|     } | |
| }
 | |
| 
 |