sonarrradarrplexorganizrnginxdashboardlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximux
		
		
		
		
			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.
		
		
		
		
		
			
		
			
				
					
					
						
							244 lines
						
					
					
						
							7.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							244 lines
						
					
					
						
							7.1 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 Lcobucci\JWT\Claim\Factory as ClaimFactory;
							 | 
						|
								use Lcobucci\JWT\Parsing\Decoder;
							 | 
						|
								use RuntimeException;
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * @author Luís Otávio Cobucci Oblonczyk <lcobucci@gmail.com>
							 | 
						|
								 * @since 0.1.0
							 | 
						|
								 */
							 | 
						|
								class ParserTest extends \PHPUnit\Framework\TestCase
							 | 
						|
								{
							 | 
						|
								    /**
							 | 
						|
								     * @var Decoder|\PHPUnit_Framework_MockObject_MockObject
							 | 
						|
								     */
							 | 
						|
								    protected $decoder;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @var ClaimFactory|\PHPUnit_Framework_MockObject_MockObject
							 | 
						|
								     */
							 | 
						|
								    protected $claimFactory;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @var Claim|\PHPUnit_Framework_MockObject_MockObject
							 | 
						|
								     */
							 | 
						|
								    protected $defaultClaim;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * {@inheritdoc}
							 | 
						|
								     */
							 | 
						|
								    protected function setUp()
							 | 
						|
								    {
							 | 
						|
								        $this->decoder = $this->createMock(Decoder::class);
							 | 
						|
								        $this->claimFactory = $this->createMock(ClaimFactory::class, [], [], '', false);
							 | 
						|
								        $this->defaultClaim = $this->createMock(Claim::class);
							 | 
						|
								
							 | 
						|
								        $this->claimFactory->expects($this->any())
							 | 
						|
								                           ->method('create')
							 | 
						|
								                           ->willReturn($this->defaultClaim);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @return Parser
							 | 
						|
								     */
							 | 
						|
								    private function createParser()
							 | 
						|
								    {
							 | 
						|
								        return new Parser($this->decoder, $this->claimFactory);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::__construct
							 | 
						|
								     */
							 | 
						|
								    public function constructMustConfigureTheAttributes()
							 | 
						|
								    {
							 | 
						|
								        $parser = $this->createParser();
							 | 
						|
								
							 | 
						|
								        $this->assertAttributeSame($this->decoder, 'decoder', $parser);
							 | 
						|
								        $this->assertAttributeSame($this->claimFactory, 'claimFactory', $parser);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @uses Lcobucci\JWT\Parser::__construct
							 | 
						|
								     *
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parse
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::splitJwt
							 | 
						|
								     *
							 | 
						|
								     * @expectedException InvalidArgumentException
							 | 
						|
								     */
							 | 
						|
								    public function parseMustRaiseExceptionWhenJWSIsNotAString()
							 | 
						|
								    {
							 | 
						|
								        $parser = $this->createParser();
							 | 
						|
								        $parser->parse(['asdasd']);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @uses Lcobucci\JWT\Parser::__construct
							 | 
						|
								     *
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parse
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::splitJwt
							 | 
						|
								     *
							 | 
						|
								     * @expectedException InvalidArgumentException
							 | 
						|
								     */
							 | 
						|
								    public function parseMustRaiseExceptionWhenJWSDontHaveThreeParts()
							 | 
						|
								    {
							 | 
						|
								        $parser = $this->createParser();
							 | 
						|
								        $parser->parse('');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @uses Lcobucci\JWT\Parser::__construct
							 | 
						|
								     *
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parse
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::splitJwt
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseHeader
							 | 
						|
								     *
							 | 
						|
								     * @expectedException RuntimeException
							 | 
						|
								     */
							 | 
						|
								    public function parseMustRaiseExceptionWhenHeaderCannotBeDecoded()
							 | 
						|
								    {
							 | 
						|
								        $this->decoder->expects($this->any())
							 | 
						|
								                      ->method('jsonDecode')
							 | 
						|
								                      ->willThrowException(new RuntimeException());
							 | 
						|
								
							 | 
						|
								        $parser = $this->createParser();
							 | 
						|
								        $parser->parse('asdfad.asdfasdf.');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @uses Lcobucci\JWT\Parser::__construct
							 | 
						|
								     *
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parse
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::splitJwt
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseHeader
							 | 
						|
								     *
							 | 
						|
								     * @expectedException InvalidArgumentException
							 | 
						|
								     */
							 | 
						|
								    public function parseMustRaiseExceptionWhenHeaderIsFromAnEncryptedToken()
							 | 
						|
								    {
							 | 
						|
								        $this->decoder->expects($this->any())
							 | 
						|
								                      ->method('jsonDecode')
							 | 
						|
								                      ->willReturn(['enc' => 'AAA']);
							 | 
						|
								
							 | 
						|
								        $parser = $this->createParser();
							 | 
						|
								        $parser->parse('a.a.');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @uses Lcobucci\JWT\Parser::__construct
							 | 
						|
								     * @uses Lcobucci\JWT\Token::__construct
							 | 
						|
								     *
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parse
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::splitJwt
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseHeader
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseClaims
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseSignature
							 | 
						|
								     *
							 | 
						|
								     */
							 | 
						|
								    public function parseMustReturnANonSignedTokenWhenSignatureIsNotInformed()
							 | 
						|
								    {
							 | 
						|
								        $this->decoder->expects($this->at(1))
							 | 
						|
								                      ->method('jsonDecode')
							 | 
						|
								                      ->willReturn(['typ' => 'JWT', 'alg' => 'none']);
							 | 
						|
								
							 | 
						|
								        $this->decoder->expects($this->at(3))
							 | 
						|
								                      ->method('jsonDecode')
							 | 
						|
								                      ->willReturn(['aud' => 'test']);
							 | 
						|
								
							 | 
						|
								        $parser = $this->createParser();
							 | 
						|
								        $token = $parser->parse('a.a.');
							 | 
						|
								
							 | 
						|
								        $this->assertAttributeEquals(['typ' => 'JWT', 'alg' => 'none'], 'headers', $token);
							 | 
						|
								        $this->assertAttributeEquals(['aud' => $this->defaultClaim], 'claims', $token);
							 | 
						|
								        $this->assertAttributeEquals(null, 'signature', $token);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @uses Lcobucci\JWT\Parser::__construct
							 | 
						|
								     * @uses Lcobucci\JWT\Token::__construct
							 | 
						|
								     *
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parse
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::splitJwt
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseHeader
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseClaims
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseSignature
							 | 
						|
								     */
							 | 
						|
								    public function parseShouldReplicateClaimValueOnHeaderWhenNeeded()
							 | 
						|
								    {
							 | 
						|
								        $this->decoder->expects($this->at(1))
							 | 
						|
								                      ->method('jsonDecode')
							 | 
						|
								                      ->willReturn(['typ' => 'JWT', 'alg' => 'none', 'aud' => 'test']);
							 | 
						|
								
							 | 
						|
								        $this->decoder->expects($this->at(3))
							 | 
						|
								                      ->method('jsonDecode')
							 | 
						|
								                      ->willReturn(['aud' => 'test']);
							 | 
						|
								
							 | 
						|
								        $parser = $this->createParser();
							 | 
						|
								        $token = $parser->parse('a.a.');
							 | 
						|
								
							 | 
						|
								        $this->assertAttributeEquals(
							 | 
						|
								            ['typ' => 'JWT', 'alg' => 'none', 'aud' => $this->defaultClaim],
							 | 
						|
								            'headers',
							 | 
						|
								            $token
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        $this->assertAttributeEquals(['aud' => $this->defaultClaim], 'claims', $token);
							 | 
						|
								        $this->assertAttributeEquals(null, 'signature', $token);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @test
							 | 
						|
								     *
							 | 
						|
								     * @uses Lcobucci\JWT\Parser::__construct
							 | 
						|
								     * @uses Lcobucci\JWT\Token::__construct
							 | 
						|
								     * @uses Lcobucci\JWT\Signature::__construct
							 | 
						|
								     *
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parse
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::splitJwt
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseHeader
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseClaims
							 | 
						|
								     * @covers Lcobucci\JWT\Parser::parseSignature
							 | 
						|
								     */
							 | 
						|
								    public function parseMustReturnASignedTokenWhenSignatureIsInformed()
							 | 
						|
								    {
							 | 
						|
								        $this->decoder->expects($this->at(1))
							 | 
						|
								                      ->method('jsonDecode')
							 | 
						|
								                      ->willReturn(['typ' => 'JWT', 'alg' => 'HS256']);
							 | 
						|
								
							 | 
						|
								        $this->decoder->expects($this->at(3))
							 | 
						|
								                      ->method('jsonDecode')
							 | 
						|
								                      ->willReturn(['aud' => 'test']);
							 | 
						|
								
							 | 
						|
								        $this->decoder->expects($this->at(4))
							 | 
						|
								                      ->method('base64UrlDecode')
							 | 
						|
								                      ->willReturn('aaa');
							 | 
						|
								
							 | 
						|
								        $parser = $this->createParser();
							 | 
						|
								        $token = $parser->parse('a.a.a');
							 | 
						|
								
							 | 
						|
								        $this->assertAttributeEquals(['typ' => 'JWT', 'alg' => 'HS256'], 'headers', $token);
							 | 
						|
								        $this->assertAttributeEquals(['aud' => $this->defaultClaim], 'claims', $token);
							 | 
						|
								        $this->assertAttributeEquals(new Signature('aaa'), 'signature', $token);
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |