Skip to content

Commit 958a987

Browse files
authored
Merge pull request #561 from Spomky/patch-1
Remove RegisteredClaimGiven exception in favour of deprecation message for withClaim
2 parents 484d9a6 + 0542295 commit 958a987

File tree

2 files changed

+114
-7
lines changed

2 files changed

+114
-7
lines changed

src/Builder.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -412,10 +412,30 @@ private function configureClaim($name, $value)
412412
public function withClaim($name, $value)
413413
{
414414
if (in_array($name, RegisteredClaims::ALL, true)) {
415-
throw RegisteredClaimGiven::forClaim($name);
415+
trigger_error('The use of the method "withClaim" is deprecated for registered claims. Please use dedicated method instead.', E_USER_DEPRECATED);
416416
}
417417

418-
return $this->configureClaim($name, $value);
418+
return $this->forwardCallToCorrectClaimMethod($name, $value);
419+
}
420+
421+
private function forwardCallToCorrectClaimMethod($name, $value)
422+
{
423+
switch ($name) {
424+
case RegisteredClaims::ID:
425+
return $this->identifiedBy($value);
426+
case RegisteredClaims::EXPIRATION_TIME:
427+
return $this->expiresAt($value);
428+
case RegisteredClaims::NOT_BEFORE:
429+
return $this->canOnlyBeUsedAfter($value);
430+
case RegisteredClaims::ISSUED_AT:
431+
return $this->issuedAt($value);
432+
case RegisteredClaims::ISSUER:
433+
return $this->issuedBy($value);
434+
case RegisteredClaims::AUDIENCE:
435+
return $this->permittedFor($value);
436+
default:
437+
return $this->configureClaim($name, $value);
438+
}
419439
}
420440

421441
/**
@@ -431,7 +451,7 @@ public function withClaim($name, $value)
431451
*/
432452
public function set($name, $value)
433453
{
434-
return $this->configureClaim($name, $value);
454+
return $this->forwardCallToCorrectClaimMethod($name, $value);
435455
}
436456

437457
/**

test/unit/BuilderTest.php

Lines changed: 91 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,7 @@ public function relatedToMustKeepAFluentInterface()
533533
* @covers ::configureClaim
534534
* @covers ::createSignature
535535
* @covers ::convertItems
536+
* @covers ::forwardCallToCorrectClaimMethod
536537
*
537538
* @uses \Lcobucci\JWT\Builder::getToken
538539
*/
@@ -553,6 +554,7 @@ public function withClaimMustConfigureTheGivenClaim()
553554
* @covers ::__construct
554555
* @covers ::withClaim
555556
* @covers ::configureClaim
557+
* @covers ::forwardCallToCorrectClaimMethod
556558
*/
557559
public function withClaimMustKeepAFluentInterface()
558560
{
@@ -564,15 +566,99 @@ public function withClaimMustKeepAFluentInterface()
564566
/**
565567
* @test
566568
*
569+
* @param string $name
570+
* @param mixed $value
571+
* @param mixed $expected
572+
* @param null|string $otherMessage
573+
*
567574
* @covers ::__construct
568575
* @covers ::withClaim
569-
* @covers \Lcobucci\JWT\Token\RegisteredClaimGiven
576+
* @covers ::canOnlyBeUsedAfter
577+
* @covers ::configureClaim
578+
* @covers ::convertItems
579+
* @covers ::convertToDate
580+
* @covers ::getToken
581+
* @covers ::setRegisteredClaim
582+
* @covers ::createSignature
583+
* @covers ::expiresAt
584+
* @covers ::issuedBy
585+
* @covers ::identifiedBy
586+
* @covers ::permittedFor
587+
* @covers ::forwardCallToCorrectClaimMethod
588+
* @covers ::issuedAt
589+
*
590+
* @dataProvider dataWithClaimDeprecationNotice
570591
*/
571-
public function withClaimShouldThrowExceptionWhenTryingToConfigureARegisteredClaim()
592+
public function withClaimShouldSendDeprecationNoticeWhenTryingToConfigureARegisteredClaim($name, $value, $expected, $otherMessage = null)
593+
{
594+
$this->expectDeprecation('The use of the method "withClaim" is deprecated for registered claims. Please use dedicated method instead.');
595+
596+
if ($otherMessage) {
597+
$this->expectDeprecation($otherMessage);
598+
}
599+
600+
$token = $this->createBuilder()
601+
->withClaim($name, $value)
602+
->getToken(new None(), Key\InMemory::plainText(''));
603+
604+
self::assertEquals($expected, $token->claims()->get($name));
605+
}
606+
607+
608+
/**
609+
* @test
610+
*
611+
* @param string $name
612+
* @param mixed $value
613+
* @param mixed $expected
614+
* @param null|string $otherMessage
615+
*
616+
* @covers ::__construct
617+
* @covers ::set
618+
* @covers ::canOnlyBeUsedAfter
619+
* @covers ::configureClaim
620+
* @covers ::convertItems
621+
* @covers ::convertToDate
622+
* @covers ::getToken
623+
* @covers ::setRegisteredClaim
624+
* @covers ::createSignature
625+
* @covers ::expiresAt
626+
* @covers ::issuedBy
627+
* @covers ::identifiedBy
628+
* @covers ::permittedFor
629+
* @covers ::forwardCallToCorrectClaimMethod
630+
* @covers ::issuedAt
631+
*
632+
* @dataProvider dataWithClaimDeprecationNotice
633+
*/
634+
public function setShouldSendDeprecationNoticeWhenTryingToConfigureARegisteredClaim($name, $value, $expected, $otherMessage = null)
635+
{
636+
if ($otherMessage) {
637+
$this->expectDeprecation($otherMessage);
638+
}
639+
640+
$token = $this->createBuilder()
641+
->set($name, $value)
642+
->getToken(new None(), Key\InMemory::plainText(''));
643+
644+
self::assertEquals($expected, $token->claims()->get($name));
645+
}
646+
647+
public function dataWithClaimDeprecationNotice()
572648
{
573-
$this->expectException(RegisteredClaimGiven::class);
649+
$now = time();
650+
$nowAsDate = new DateTimeImmutable('@' . $now);
651+
$nowPlus1HourAsDate = $nowAsDate->modify('+1 hour');
574652

575-
$this->createBuilder()->withClaim('sub', 'me');
653+
return [
654+
['sub', 'me', 'me'],
655+
['aud', 'him', ['him']],
656+
['jti', '0123456789ABCDEF', '0123456789ABCDEF'],
657+
['iss', 'you', 'you'],
658+
['exp', $nowPlus1HourAsDate->getTimestamp(), $nowPlus1HourAsDate, 'Using integers for registered date claims is deprecated, please use DateTimeImmutable objects instead.'],
659+
['iat', $now, $nowAsDate, 'Using integers for registered date claims is deprecated, please use DateTimeImmutable objects instead.'],
660+
['nbf', $now, $nowAsDate, 'Using integers for registered date claims is deprecated, please use DateTimeImmutable objects instead.'],
661+
];
576662
}
577663

578664
/**
@@ -687,6 +773,7 @@ public function unsignMustKeepAFluentInterface(Builder $builder)
687773
* @uses \Lcobucci\JWT\Builder::__construct
688774
* @uses \Lcobucci\JWT\Builder::configureClaim
689775
* @uses \Lcobucci\JWT\Builder::withClaim
776+
* @uses \Lcobucci\JWT\Builder::forwardCallToCorrectClaimMethod
690777
*/
691778
public function getTokenMustReturnANewTokenWithCurrentConfiguration()
692779
{

0 commit comments

Comments
 (0)