Skip to content

Commit ba4aa2d

Browse files
yassinraislcobucci
authored andcommitted
🖋 The issue about timestamp float precsion fixed using a json_encode instead of (string)
1 parent 484430f commit ba4aa2d

File tree

5 files changed

+15
-25
lines changed

5 files changed

+15
-25
lines changed

src/Encoding/MicrosecondBasedDateConversion.php

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
namespace Lcobucci\JWT\Encoding;
55

6-
use DateTimeImmutable;
76
use Lcobucci\JWT\ClaimsFormatter;
87
use Lcobucci\JWT\Token\RegisteredClaims;
98

@@ -19,22 +18,9 @@ public function formatClaims(array $claims): array
1918
continue;
2019
}
2120

22-
$claims[$claim] = $this->convertDate($claims[$claim]);
21+
$claims[$claim] = (float) $claims[$claim]->format('U.u');
2322
}
2423

2524
return $claims;
2625
}
27-
28-
/** @return int|string */
29-
private function convertDate(DateTimeImmutable $date)
30-
{
31-
$seconds = $date->format('U');
32-
$microseconds = $date->format('u');
33-
34-
if ((int) $microseconds === 0) {
35-
return (int) $seconds;
36-
}
37-
38-
return $seconds . '.' . $microseconds;
39-
}
4026
}

src/Token/Parser.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212
use function count;
1313
use function explode;
1414
use function is_array;
15+
use function is_string;
16+
use function json_encode;
1517
use function strpos;
1618

19+
use const JSON_THROW_ON_ERROR;
20+
1721
final class Parser implements ParserInterface
1822
{
1923
private Decoder $decoder;
@@ -105,7 +109,9 @@ private function parseClaims(string $data): array
105109
continue;
106110
}
107111

108-
$claims[$claim] = $this->convertDate((string) $claims[$claim]);
112+
$date = $claims[$claim];
113+
114+
$claims[$claim] = $this->convertDate(is_string($date) ? $date : json_encode($date, JSON_THROW_ON_ERROR));
109115
}
110116

111117
return $claims;

test/unit/Encoding/ChainedFormatterTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ public function formatClaimsShouldApplyAllConfiguredFormatters(): void
3434
$formatted = $formatter->formatClaims($claims);
3535

3636
self::assertSame('test', $formatted[RegisteredClaims::AUDIENCE]);
37-
self::assertSame('1487285080.123456', $formatted[RegisteredClaims::EXPIRATION_TIME]);
37+
self::assertSame(1487285080.123456, $formatted[RegisteredClaims::EXPIRATION_TIME]);
3838
}
3939
}

test/unit/Encoding/MicrosecondBasedDateConversionTest.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ final class MicrosecondBasedDateConversionTest extends TestCase
1414
* @test
1515
*
1616
* @covers ::formatClaims
17-
* @covers ::convertDate
1817
*/
1918
public function dateClaimsHaveMicrosecondsOrSeconds(): void
2019
{
@@ -35,17 +34,16 @@ public function dateClaimsHaveMicrosecondsOrSeconds(): void
3534
$formatter = new MicrosecondBasedDateConversion();
3635
$formatted = $formatter->formatClaims($claims);
3736

38-
self::assertSame(1487285080, $formatted[RegisteredClaims::ISSUED_AT]);
39-
self::assertSame('1487285080.000123', $formatted[RegisteredClaims::NOT_BEFORE]);
40-
self::assertSame('1487285080.123456', $formatted[RegisteredClaims::EXPIRATION_TIME]);
37+
self::assertSame(1487285080.0, $formatted[RegisteredClaims::ISSUED_AT]);
38+
self::assertSame(1487285080.000123, $formatted[RegisteredClaims::NOT_BEFORE]);
39+
self::assertSame(1487285080.123456, $formatted[RegisteredClaims::EXPIRATION_TIME]);
4140
self::assertSame('test', $formatted['testing']); // this should remain untouched
4241
}
4342

4443
/**
4544
* @test
4645
*
4746
* @covers ::formatClaims
48-
* @covers ::convertDate
4947
*/
5048
public function notAllDateClaimsNeedToBeConfigured(): void
5149
{
@@ -61,8 +59,8 @@ public function notAllDateClaimsNeedToBeConfigured(): void
6159
$formatter = new MicrosecondBasedDateConversion();
6260
$formatted = $formatter->formatClaims($claims);
6361

64-
self::assertSame(1487285080, $formatted[RegisteredClaims::ISSUED_AT]);
65-
self::assertSame('1487285080.123456', $formatted[RegisteredClaims::EXPIRATION_TIME]);
62+
self::assertSame(1487285080.0, $formatted[RegisteredClaims::ISSUED_AT]);
63+
self::assertSame(1487285080.123456, $formatted[RegisteredClaims::EXPIRATION_TIME]);
6664
self::assertSame('test', $formatted['testing']); // this should remain untouched
6765
}
6866
}

test/unit/Token/ParserTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ public function parseMustConvertDateClaimsToObjects(): void
453453
{
454454
$data = [
455455
RegisteredClaims::ISSUED_AT => 1486930663,
456-
RegisteredClaims::EXPIRATION_TIME => '1486930757.023055',
456+
RegisteredClaims::EXPIRATION_TIME => 1486930757.023055,
457457
];
458458

459459
$this->decoder->expects(self::exactly(2))

0 commit comments

Comments
 (0)