From 55638e56e9e183715d30455e80ddb9b6d08fd715 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Wed, 4 Dec 2024 09:50:00 +0100 Subject: [PATCH] Mark classes as `readonly` --- src/Configuration.php | 39 ++---------- src/Encoding/ChainedFormatter.php | 2 +- src/Encoding/JoseEncoder.php | 2 +- .../MicrosecondBasedDateConversion.php | 2 +- src/Encoding/UnifyAudience.php | 2 +- src/Encoding/UnixTimestampDates.php | 2 +- src/JwtFacade.php | 6 +- src/Signer/Blake2b.php | 2 +- src/Signer/Ecdsa.php | 4 +- src/Signer/Ecdsa/MultibyteStringConverter.php | 2 +- src/Signer/Ecdsa/Sha256.php | 2 +- src/Signer/Ecdsa/Sha384.php | 2 +- src/Signer/Ecdsa/Sha512.php | 2 +- src/Signer/Eddsa.php | 2 +- src/Signer/Hmac.php | 2 +- src/Signer/Hmac/Sha256.php | 2 +- src/Signer/Hmac/Sha384.php | 2 +- src/Signer/Hmac/Sha512.php | 2 +- src/Signer/Key/InMemory.php | 6 +- src/Signer/OpenSSL.php | 2 +- src/Signer/Rsa.php | 2 +- src/Signer/Rsa/Sha256.php | 2 +- src/Signer/Rsa/Sha384.php | 2 +- src/Signer/Rsa/Sha512.php | 2 +- src/SodiumBase64Polyfill.php | 2 +- src/Token/Builder.php | 63 +++++++++++-------- src/Token/DataSet.php | 4 +- src/Token/Parser.php | 4 +- src/Token/Plain.php | 8 +-- src/Token/Signature.php | 4 +- src/Validation/Constraint/HasClaim.php | 4 +- .../Constraint/HasClaimWithValue.php | 4 +- src/Validation/Constraint/IdentifiedBy.php | 4 +- src/Validation/Constraint/IssuedBy.php | 4 +- src/Validation/Constraint/LooseValidAt.php | 6 +- src/Validation/Constraint/PermittedFor.php | 4 +- src/Validation/Constraint/RelatedTo.php | 4 +- src/Validation/Constraint/SignedWith.php | 4 +- .../Constraint/SignedWithOneInSet.php | 4 +- .../Constraint/SignedWithUntilDate.php | 8 +-- src/Validation/Constraint/StrictValidAt.php | 6 +- src/Validation/Validator.php | 4 +- tests/ConfigurationTest.php | 57 ----------------- tests/KeyDumpSigner.php | 2 +- tests/Signer/Rsa/KeyValidationSigner.php | 37 +++++++++++ tests/Signer/Rsa/KeyValidationTest.php | 30 +-------- tests/UnsupportedParser.php | 2 +- 47 files changed, 150 insertions(+), 214 deletions(-) create mode 100644 tests/Signer/Rsa/KeyValidationSigner.php diff --git a/src/Configuration.php b/src/Configuration.php index ea05e3b9..347f91dc 100644 --- a/src/Configuration.php +++ b/src/Configuration.php @@ -15,7 +15,7 @@ * Serves like a small DI container to simplify the creation and usage * of the objects. */ -final class Configuration +final readonly class Configuration { private Parser $parser; private Validator $validator; @@ -28,11 +28,11 @@ final class Configuration /** @param Closure(ClaimsFormatter $claimFormatter): Builder|null $builderFactory */ private function __construct( - private readonly Signer $signer, - private readonly Key $signingKey, - private readonly Key $verificationKey, - private readonly Encoder $encoder, - private readonly Decoder $decoder, + private Signer $signer, + private Key $signingKey, + private Key $verificationKey, + private Encoder $encoder, + private Decoder $decoder, ?Parser $parser, ?Validator $validator, ?Closure $builderFactory, @@ -86,15 +86,6 @@ public static function forSymmetricSigner( ); } - /** - * @deprecated Deprecated since v5.5, please use {@see self::withBuilderFactory()} instead - * - * @param callable(ClaimsFormatter): Builder $builderFactory - */ - public function setBuilderFactory(callable $builderFactory): void - { - $this->builderFactory = $builderFactory(...); - } /** @param callable(ClaimsFormatter): Builder $builderFactory */ public function withBuilderFactory(callable $builderFactory): self @@ -122,12 +113,6 @@ public function parser(): Parser return $this->parser; } - /** @deprecated Deprecated since v5.5, please use {@see self::withParser()} instead */ - public function setParser(Parser $parser): void - { - $this->parser = $parser; - } - public function withParser(Parser $parser): self { return new self( @@ -163,12 +148,6 @@ public function validator(): Validator return $this->validator; } - /** @deprecated Deprecated since v5.5, please use {@see self::withValidator()} instead */ - public function setValidator(Validator $validator): void - { - $this->validator = $validator; - } - public function withValidator(Validator $validator): self { return new self( @@ -190,12 +169,6 @@ public function validationConstraints(): array return $this->validationConstraints; } - /** @deprecated Deprecated since v5.5, please use {@see self::withValidationConstraints()} instead */ - public function setValidationConstraints(Constraint ...$validationConstraints): void - { - $this->validationConstraints = $validationConstraints; - } - public function withValidationConstraints(Constraint ...$validationConstraints): self { return new self( diff --git a/src/Encoding/ChainedFormatter.php b/src/Encoding/ChainedFormatter.php index 7310c91b..bb765d8a 100644 --- a/src/Encoding/ChainedFormatter.php +++ b/src/Encoding/ChainedFormatter.php @@ -5,7 +5,7 @@ use Lcobucci\JWT\ClaimsFormatter; -final class ChainedFormatter implements ClaimsFormatter +final readonly class ChainedFormatter implements ClaimsFormatter { /** @var array */ private array $formatters; diff --git a/src/Encoding/JoseEncoder.php b/src/Encoding/JoseEncoder.php index 0d904442..6d088237 100644 --- a/src/Encoding/JoseEncoder.php +++ b/src/Encoding/JoseEncoder.php @@ -18,7 +18,7 @@ /** * A utilitarian class that encodes and decodes data according to JOSE specifications */ -final class JoseEncoder implements Encoder, Decoder +final readonly class JoseEncoder implements Encoder, Decoder { public function jsonEncode(mixed $data): string { diff --git a/src/Encoding/MicrosecondBasedDateConversion.php b/src/Encoding/MicrosecondBasedDateConversion.php index 80f28308..2795ea26 100644 --- a/src/Encoding/MicrosecondBasedDateConversion.php +++ b/src/Encoding/MicrosecondBasedDateConversion.php @@ -9,7 +9,7 @@ use function array_key_exists; -final class MicrosecondBasedDateConversion implements ClaimsFormatter +final readonly class MicrosecondBasedDateConversion implements ClaimsFormatter { /** @inheritdoc */ public function formatClaims(array $claims): array diff --git a/src/Encoding/UnifyAudience.php b/src/Encoding/UnifyAudience.php index cf57252e..de919969 100644 --- a/src/Encoding/UnifyAudience.php +++ b/src/Encoding/UnifyAudience.php @@ -10,7 +10,7 @@ use function count; use function current; -final class UnifyAudience implements ClaimsFormatter +final readonly class UnifyAudience implements ClaimsFormatter { /** @inheritdoc */ public function formatClaims(array $claims): array diff --git a/src/Encoding/UnixTimestampDates.php b/src/Encoding/UnixTimestampDates.php index 7d58389b..ce1f60b1 100644 --- a/src/Encoding/UnixTimestampDates.php +++ b/src/Encoding/UnixTimestampDates.php @@ -9,7 +9,7 @@ use function array_key_exists; -final class UnixTimestampDates implements ClaimsFormatter +final readonly class UnixTimestampDates implements ClaimsFormatter { /** @inheritdoc */ public function formatClaims(array $claims): array diff --git a/src/JwtFacade.php b/src/JwtFacade.php index 41d0f7c1..e1c4a366 100644 --- a/src/JwtFacade.php +++ b/src/JwtFacade.php @@ -16,12 +16,12 @@ use function assert; -final class JwtFacade +final readonly class JwtFacade { - private readonly Clock $clock; + private Clock $clock; public function __construct( - private readonly Parser $parser = new Token\Parser(new JoseEncoder()), + private Parser $parser = new Token\Parser(new JoseEncoder()), ?Clock $clock = null, ) { $this->clock = $clock ?? new class implements Clock { diff --git a/src/Signer/Blake2b.php b/src/Signer/Blake2b.php index 71f2d9dd..a82d2cf3 100644 --- a/src/Signer/Blake2b.php +++ b/src/Signer/Blake2b.php @@ -9,7 +9,7 @@ use function sodium_crypto_generichash; use function strlen; -final class Blake2b implements Signer +final readonly class Blake2b implements Signer { private const MINIMUM_KEY_LENGTH_IN_BITS = 256; diff --git a/src/Signer/Ecdsa.php b/src/Signer/Ecdsa.php index d6f8e1f4..f43d0f28 100644 --- a/src/Signer/Ecdsa.php +++ b/src/Signer/Ecdsa.php @@ -8,10 +8,10 @@ use const OPENSSL_KEYTYPE_EC; -abstract class Ecdsa extends OpenSSL +abstract readonly class Ecdsa extends OpenSSL { public function __construct( - private readonly SignatureConverter $converter = new MultibyteStringConverter(), + private SignatureConverter $converter = new MultibyteStringConverter(), ) { } diff --git a/src/Signer/Ecdsa/MultibyteStringConverter.php b/src/Signer/Ecdsa/MultibyteStringConverter.php index 0e02a0f2..da7e71e4 100644 --- a/src/Signer/Ecdsa/MultibyteStringConverter.php +++ b/src/Signer/Ecdsa/MultibyteStringConverter.php @@ -31,7 +31,7 @@ * * @internal */ -final class MultibyteStringConverter implements SignatureConverter +final readonly class MultibyteStringConverter implements SignatureConverter { private const ASN1_SEQUENCE = '30'; private const ASN1_INTEGER = '02'; diff --git a/src/Signer/Ecdsa/Sha256.php b/src/Signer/Ecdsa/Sha256.php index ff00f4d4..b8b68dd0 100644 --- a/src/Signer/Ecdsa/Sha256.php +++ b/src/Signer/Ecdsa/Sha256.php @@ -7,7 +7,7 @@ use const OPENSSL_ALGO_SHA256; -final class Sha256 extends Ecdsa +final readonly class Sha256 extends Ecdsa { public function algorithmId(): string { diff --git a/src/Signer/Ecdsa/Sha384.php b/src/Signer/Ecdsa/Sha384.php index fa6dd657..dc3bdae0 100644 --- a/src/Signer/Ecdsa/Sha384.php +++ b/src/Signer/Ecdsa/Sha384.php @@ -7,7 +7,7 @@ use const OPENSSL_ALGO_SHA384; -final class Sha384 extends Ecdsa +final readonly class Sha384 extends Ecdsa { public function algorithmId(): string { diff --git a/src/Signer/Ecdsa/Sha512.php b/src/Signer/Ecdsa/Sha512.php index 6017865a..89208fe8 100644 --- a/src/Signer/Ecdsa/Sha512.php +++ b/src/Signer/Ecdsa/Sha512.php @@ -7,7 +7,7 @@ use const OPENSSL_ALGO_SHA512; -final class Sha512 extends Ecdsa +final readonly class Sha512 extends Ecdsa { public function algorithmId(): string { diff --git a/src/Signer/Eddsa.php b/src/Signer/Eddsa.php index 03ad88bd..aac7155c 100644 --- a/src/Signer/Eddsa.php +++ b/src/Signer/Eddsa.php @@ -9,7 +9,7 @@ use function sodium_crypto_sign_detached; use function sodium_crypto_sign_verify_detached; -final class Eddsa implements Signer +final readonly class Eddsa implements Signer { public function algorithmId(): string { diff --git a/src/Signer/Hmac.php b/src/Signer/Hmac.php index 815f84c3..3c83e69f 100644 --- a/src/Signer/Hmac.php +++ b/src/Signer/Hmac.php @@ -9,7 +9,7 @@ use function hash_hmac; use function strlen; -abstract class Hmac implements Signer +abstract readonly class Hmac implements Signer { final public function sign(string $payload, Key $key): string { diff --git a/src/Signer/Hmac/Sha256.php b/src/Signer/Hmac/Sha256.php index e19992ec..b533488e 100644 --- a/src/Signer/Hmac/Sha256.php +++ b/src/Signer/Hmac/Sha256.php @@ -5,7 +5,7 @@ use Lcobucci\JWT\Signer\Hmac; -final class Sha256 extends Hmac +final readonly class Sha256 extends Hmac { public function algorithmId(): string { diff --git a/src/Signer/Hmac/Sha384.php b/src/Signer/Hmac/Sha384.php index ab795bc3..b3e101ec 100644 --- a/src/Signer/Hmac/Sha384.php +++ b/src/Signer/Hmac/Sha384.php @@ -5,7 +5,7 @@ use Lcobucci\JWT\Signer\Hmac; -final class Sha384 extends Hmac +final readonly class Sha384 extends Hmac { public function algorithmId(): string { diff --git a/src/Signer/Hmac/Sha512.php b/src/Signer/Hmac/Sha512.php index 69716122..306640fd 100644 --- a/src/Signer/Hmac/Sha512.php +++ b/src/Signer/Hmac/Sha512.php @@ -5,7 +5,7 @@ use Lcobucci\JWT\Signer\Hmac; -final class Sha512 extends Hmac +final readonly class Sha512 extends Hmac { public function algorithmId(): string { diff --git a/src/Signer/Key/InMemory.php b/src/Signer/Key/InMemory.php index 8bc06938..749fa03e 100644 --- a/src/Signer/Key/InMemory.php +++ b/src/Signer/Key/InMemory.php @@ -13,14 +13,14 @@ use function assert; use function is_string; -final class InMemory implements Key +final readonly class InMemory implements Key { /** @param non-empty-string $contents */ private function __construct( #[SensitiveParameter] - public readonly string $contents, + public string $contents, #[SensitiveParameter] - public readonly string $passphrase, + public string $passphrase, ) { } diff --git a/src/Signer/OpenSSL.php b/src/Signer/OpenSSL.php index a507752b..77c51854 100644 --- a/src/Signer/OpenSSL.php +++ b/src/Signer/OpenSSL.php @@ -25,7 +25,7 @@ use const OPENSSL_KEYTYPE_RSA; use const PHP_EOL; -abstract class OpenSSL implements Signer +abstract readonly class OpenSSL implements Signer { protected const KEY_TYPE_MAP = [ OPENSSL_KEYTYPE_RSA => 'RSA', diff --git a/src/Signer/Rsa.php b/src/Signer/Rsa.php index ba7d72d5..569084ed 100644 --- a/src/Signer/Rsa.php +++ b/src/Signer/Rsa.php @@ -5,7 +5,7 @@ use const OPENSSL_KEYTYPE_RSA; -abstract class Rsa extends OpenSSL +abstract readonly class Rsa extends OpenSSL { private const MINIMUM_KEY_LENGTH = 2048; diff --git a/src/Signer/Rsa/Sha256.php b/src/Signer/Rsa/Sha256.php index 9e56c70f..60234e13 100644 --- a/src/Signer/Rsa/Sha256.php +++ b/src/Signer/Rsa/Sha256.php @@ -7,7 +7,7 @@ use const OPENSSL_ALGO_SHA256; -final class Sha256 extends Rsa +final readonly class Sha256 extends Rsa { public function algorithmId(): string { diff --git a/src/Signer/Rsa/Sha384.php b/src/Signer/Rsa/Sha384.php index 99ff3698..814cc088 100644 --- a/src/Signer/Rsa/Sha384.php +++ b/src/Signer/Rsa/Sha384.php @@ -7,7 +7,7 @@ use const OPENSSL_ALGO_SHA384; -final class Sha384 extends Rsa +final readonly class Sha384 extends Rsa { public function algorithmId(): string { diff --git a/src/Signer/Rsa/Sha512.php b/src/Signer/Rsa/Sha512.php index 1ddd1930..2736aec5 100644 --- a/src/Signer/Rsa/Sha512.php +++ b/src/Signer/Rsa/Sha512.php @@ -7,7 +7,7 @@ use const OPENSSL_ALGO_SHA512; -final class Sha512 extends Rsa +final readonly class Sha512 extends Rsa { public function algorithmId(): string { diff --git a/src/SodiumBase64Polyfill.php b/src/SodiumBase64Polyfill.php index 65879753..c56c7751 100644 --- a/src/SodiumBase64Polyfill.php +++ b/src/SodiumBase64Polyfill.php @@ -16,7 +16,7 @@ use function strtr; /** @internal */ -final class SodiumBase64Polyfill +final readonly class SodiumBase64Polyfill { public const SODIUM_BASE64_VARIANT_ORIGINAL = 1; public const SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING = 3; diff --git a/src/Token/Builder.php b/src/Token/Builder.php index 3ba82b59..9eedcf34 100644 --- a/src/Token/Builder.php +++ b/src/Token/Builder.php @@ -17,17 +17,18 @@ use function in_array; /** @immutable */ -final class Builder implements BuilderInterface +final readonly class Builder implements BuilderInterface { - /** @var array */ - private array $headers = ['typ' => 'JWT', 'alg' => null]; - - /** @var array */ - private array $claims = []; - - /** @deprecated Deprecated since v5.5, please use {@see self::new()} instead */ - public function __construct(private readonly Encoder $encoder, private readonly ClaimsFormatter $claimFormatter) - { + /** + * @param array $headers + * @param array $claims + */ + private function __construct( + private Encoder $encoder, + private ClaimsFormatter $claimFormatter, + private array $headers = ['typ' => 'JWT', 'alg' => null], + private array $claims = [], + ) { } public static function new(Encoder $encoder, ClaimsFormatter $claimFormatter): self @@ -44,7 +45,7 @@ public function permittedFor(string ...$audiences): BuilderInterface $configured = $this->claims[RegisteredClaims::AUDIENCE] ?? []; $toAppend = array_diff($audiences, $configured); - return $this->setClaim(RegisteredClaims::AUDIENCE, array_merge($configured, $toAppend)); + return $this->newWithClaim(RegisteredClaims::AUDIENCE, array_merge($configured, $toAppend)); } /** @@ -53,7 +54,7 @@ public function permittedFor(string ...$audiences): BuilderInterface */ public function expiresAt(DateTimeImmutable $expiration): BuilderInterface { - return $this->setClaim(RegisteredClaims::EXPIRATION_TIME, $expiration); + return $this->newWithClaim(RegisteredClaims::EXPIRATION_TIME, $expiration); } /** @@ -62,7 +63,7 @@ public function expiresAt(DateTimeImmutable $expiration): BuilderInterface */ public function identifiedBy(string $id): BuilderInterface { - return $this->setClaim(RegisteredClaims::ID, $id); + return $this->newWithClaim(RegisteredClaims::ID, $id); } /** @@ -71,7 +72,7 @@ public function identifiedBy(string $id): BuilderInterface */ public function issuedAt(DateTimeImmutable $issuedAt): BuilderInterface { - return $this->setClaim(RegisteredClaims::ISSUED_AT, $issuedAt); + return $this->newWithClaim(RegisteredClaims::ISSUED_AT, $issuedAt); } /** @@ -80,7 +81,7 @@ public function issuedAt(DateTimeImmutable $issuedAt): BuilderInterface */ public function issuedBy(string $issuer): BuilderInterface { - return $this->setClaim(RegisteredClaims::ISSUER, $issuer); + return $this->newWithClaim(RegisteredClaims::ISSUER, $issuer); } /** @@ -89,7 +90,7 @@ public function issuedBy(string $issuer): BuilderInterface */ public function canOnlyBeUsedAfter(DateTimeImmutable $notBefore): BuilderInterface { - return $this->setClaim(RegisteredClaims::NOT_BEFORE, $notBefore); + return $this->newWithClaim(RegisteredClaims::NOT_BEFORE, $notBefore); } /** @@ -98,7 +99,7 @@ public function canOnlyBeUsedAfter(DateTimeImmutable $notBefore): BuilderInterfa */ public function relatedTo(string $subject): BuilderInterface { - return $this->setClaim(RegisteredClaims::SUBJECT, $subject); + return $this->newWithClaim(RegisteredClaims::SUBJECT, $subject); } /** @@ -107,10 +108,15 @@ public function relatedTo(string $subject): BuilderInterface */ public function withHeader(string $name, mixed $value): BuilderInterface { - $new = clone $this; - $new->headers[$name] = $value; + $headers = $this->headers; + $headers[$name] = $value; - return $new; + return new self( + $this->encoder, + $this->claimFormatter, + $headers, + $this->claims, + ); } /** @@ -123,16 +129,21 @@ public function withClaim(string $name, mixed $value): BuilderInterface throw RegisteredClaimGiven::forClaim($name); } - return $this->setClaim($name, $value); + return $this->newWithClaim($name, $value); } /** @param non-empty-string $name */ - private function setClaim(string $name, mixed $value): BuilderInterface + private function newWithClaim(string $name, mixed $value): BuilderInterface { - $new = clone $this; - $new->claims[$name] = $value; - - return $new; + $claims = $this->claims; + $claims[$name] = $value; + + return new self( + $this->encoder, + $this->claimFormatter, + $this->headers, + $claims, + ); } /** diff --git a/src/Token/DataSet.php b/src/Token/DataSet.php index 6c0b98ab..8f41ea98 100644 --- a/src/Token/DataSet.php +++ b/src/Token/DataSet.php @@ -5,10 +5,10 @@ use function array_key_exists; -final class DataSet +final readonly class DataSet { /** @param array $data */ - public function __construct(private readonly array $data, private readonly string $encoded) + public function __construct(private array $data, private string $encoded) { } diff --git a/src/Token/Parser.php b/src/Token/Parser.php index 27db5404..a068d5fe 100644 --- a/src/Token/Parser.php +++ b/src/Token/Parser.php @@ -15,11 +15,11 @@ use function is_numeric; use function number_format; -final class Parser implements ParserInterface +final readonly class Parser implements ParserInterface { private const MICROSECOND_PRECISION = 6; - public function __construct(private readonly Decoder $decoder) + public function __construct(private Decoder $decoder) { } diff --git a/src/Token/Plain.php b/src/Token/Plain.php index 6af388d5..1a176e43 100644 --- a/src/Token/Plain.php +++ b/src/Token/Plain.php @@ -8,12 +8,12 @@ use function in_array; -final class Plain implements UnencryptedToken +final readonly class Plain implements UnencryptedToken { public function __construct( - private readonly DataSet $headers, - private readonly DataSet $claims, - private readonly Signature $signature, + private DataSet $headers, + private DataSet $claims, + private Signature $signature, ) { } diff --git a/src/Token/Signature.php b/src/Token/Signature.php index 5deca086..b04c14fa 100644 --- a/src/Token/Signature.php +++ b/src/Token/Signature.php @@ -3,13 +3,13 @@ namespace Lcobucci\JWT\Token; -final class Signature +final readonly class Signature { /** * @param non-empty-string $hash * @param non-empty-string $encoded */ - public function __construct(private readonly string $hash, private readonly string $encoded) + public function __construct(private string $hash, private string $encoded) { } diff --git a/src/Validation/Constraint/HasClaim.php b/src/Validation/Constraint/HasClaim.php index c7b674ba..49704d91 100644 --- a/src/Validation/Constraint/HasClaim.php +++ b/src/Validation/Constraint/HasClaim.php @@ -10,10 +10,10 @@ use function in_array; -final class HasClaim implements Constraint +final readonly class HasClaim implements Constraint { /** @param non-empty-string $claim */ - public function __construct(private readonly string $claim) + public function __construct(private string $claim) { if (in_array($claim, Token\RegisteredClaims::ALL, true)) { throw CannotValidateARegisteredClaim::create($claim); diff --git a/src/Validation/Constraint/HasClaimWithValue.php b/src/Validation/Constraint/HasClaimWithValue.php index d3ba1d6e..ce7df727 100644 --- a/src/Validation/Constraint/HasClaimWithValue.php +++ b/src/Validation/Constraint/HasClaimWithValue.php @@ -10,10 +10,10 @@ use function in_array; -final class HasClaimWithValue implements Constraint +final readonly class HasClaimWithValue implements Constraint { /** @param non-empty-string $claim */ - public function __construct(private readonly string $claim, private readonly mixed $expectedValue) + public function __construct(private string $claim, private mixed $expectedValue) { if (in_array($claim, Token\RegisteredClaims::ALL, true)) { throw CannotValidateARegisteredClaim::create($claim); diff --git a/src/Validation/Constraint/IdentifiedBy.php b/src/Validation/Constraint/IdentifiedBy.php index 44541a75..a8772d96 100644 --- a/src/Validation/Constraint/IdentifiedBy.php +++ b/src/Validation/Constraint/IdentifiedBy.php @@ -7,10 +7,10 @@ use Lcobucci\JWT\Validation\Constraint; use Lcobucci\JWT\Validation\ConstraintViolation; -final class IdentifiedBy implements Constraint +final readonly class IdentifiedBy implements Constraint { /** @param non-empty-string $id */ - public function __construct(private readonly string $id) + public function __construct(private string $id) { } diff --git a/src/Validation/Constraint/IssuedBy.php b/src/Validation/Constraint/IssuedBy.php index 8ba3890d..013804d6 100644 --- a/src/Validation/Constraint/IssuedBy.php +++ b/src/Validation/Constraint/IssuedBy.php @@ -7,10 +7,10 @@ use Lcobucci\JWT\Validation\Constraint; use Lcobucci\JWT\Validation\ConstraintViolation; -final class IssuedBy implements Constraint +final readonly class IssuedBy implements Constraint { /** @var non-empty-string[] */ - private readonly array $issuers; + private array $issuers; /** @param non-empty-string ...$issuers */ public function __construct(string ...$issuers) diff --git a/src/Validation/Constraint/LooseValidAt.php b/src/Validation/Constraint/LooseValidAt.php index 9be0cc40..633c2281 100644 --- a/src/Validation/Constraint/LooseValidAt.php +++ b/src/Validation/Constraint/LooseValidAt.php @@ -10,11 +10,11 @@ use Lcobucci\JWT\Validation\ValidAt as ValidAtInterface; use Psr\Clock\ClockInterface as Clock; -final class LooseValidAt implements ValidAtInterface +final readonly class LooseValidAt implements ValidAtInterface { - private readonly DateInterval $leeway; + private DateInterval $leeway; - public function __construct(private readonly Clock $clock, ?DateInterval $leeway = null) + public function __construct(private Clock $clock, ?DateInterval $leeway = null) { $this->leeway = $this->guardLeeway($leeway); } diff --git a/src/Validation/Constraint/PermittedFor.php b/src/Validation/Constraint/PermittedFor.php index 48544c9a..841bee1d 100644 --- a/src/Validation/Constraint/PermittedFor.php +++ b/src/Validation/Constraint/PermittedFor.php @@ -7,10 +7,10 @@ use Lcobucci\JWT\Validation\Constraint; use Lcobucci\JWT\Validation\ConstraintViolation; -final class PermittedFor implements Constraint +final readonly class PermittedFor implements Constraint { /** @param non-empty-string $audience */ - public function __construct(private readonly string $audience) + public function __construct(private string $audience) { } diff --git a/src/Validation/Constraint/RelatedTo.php b/src/Validation/Constraint/RelatedTo.php index 16493623..3532fe4a 100644 --- a/src/Validation/Constraint/RelatedTo.php +++ b/src/Validation/Constraint/RelatedTo.php @@ -7,10 +7,10 @@ use Lcobucci\JWT\Validation\Constraint; use Lcobucci\JWT\Validation\ConstraintViolation; -final class RelatedTo implements Constraint +final readonly class RelatedTo implements Constraint { /** @param non-empty-string $subject */ - public function __construct(private readonly string $subject) + public function __construct(private string $subject) { } diff --git a/src/Validation/Constraint/SignedWith.php b/src/Validation/Constraint/SignedWith.php index 5c8e2656..ec33ce4a 100644 --- a/src/Validation/Constraint/SignedWith.php +++ b/src/Validation/Constraint/SignedWith.php @@ -9,9 +9,9 @@ use Lcobucci\JWT\Validation\ConstraintViolation; use Lcobucci\JWT\Validation\SignedWith as SignedWithInterface; -final class SignedWith implements SignedWithInterface +final readonly class SignedWith implements SignedWithInterface { - public function __construct(private readonly Signer $signer, private readonly Signer\Key $key) + public function __construct(private Signer $signer, private Signer\Key $key) { } diff --git a/src/Validation/Constraint/SignedWithOneInSet.php b/src/Validation/Constraint/SignedWithOneInSet.php index fb542fb3..2cbe4914 100644 --- a/src/Validation/Constraint/SignedWithOneInSet.php +++ b/src/Validation/Constraint/SignedWithOneInSet.php @@ -9,10 +9,10 @@ use const PHP_EOL; -final class SignedWithOneInSet implements SignedWithInterface +final readonly class SignedWithOneInSet implements SignedWithInterface { /** @var array */ - private readonly array $constraints; + private array $constraints; public function __construct(SignedWithUntilDate ...$constraints) { diff --git a/src/Validation/Constraint/SignedWithUntilDate.php b/src/Validation/Constraint/SignedWithUntilDate.php index 85429e89..6eb58f16 100644 --- a/src/Validation/Constraint/SignedWithUntilDate.php +++ b/src/Validation/Constraint/SignedWithUntilDate.php @@ -11,15 +11,15 @@ use Lcobucci\JWT\Validation\SignedWith as SignedWithInterface; use Psr\Clock\ClockInterface; -final class SignedWithUntilDate implements SignedWithInterface +final readonly class SignedWithUntilDate implements SignedWithInterface { - private readonly SignedWith $verifySignature; - private readonly ClockInterface $clock; + private SignedWith $verifySignature; + private ClockInterface $clock; public function __construct( Signer $signer, Signer\Key $key, - private readonly DateTimeImmutable $validUntil, + private DateTimeImmutable $validUntil, ?ClockInterface $clock = null, ) { $this->verifySignature = new SignedWith($signer, $key); diff --git a/src/Validation/Constraint/StrictValidAt.php b/src/Validation/Constraint/StrictValidAt.php index 93db0a3a..90eb8608 100644 --- a/src/Validation/Constraint/StrictValidAt.php +++ b/src/Validation/Constraint/StrictValidAt.php @@ -11,11 +11,11 @@ use Lcobucci\JWT\Validation\ValidAt as ValidAtInterface; use Psr\Clock\ClockInterface as Clock; -final class StrictValidAt implements ValidAtInterface +final readonly class StrictValidAt implements ValidAtInterface { - private readonly DateInterval $leeway; + private DateInterval $leeway; - public function __construct(private readonly Clock $clock, ?DateInterval $leeway = null) + public function __construct(private Clock $clock, ?DateInterval $leeway = null) { $this->leeway = $this->guardLeeway($leeway); } diff --git a/src/Validation/Validator.php b/src/Validation/Validator.php index 8c0ea231..8548e5ab 100644 --- a/src/Validation/Validator.php +++ b/src/Validation/Validator.php @@ -5,7 +5,7 @@ use Lcobucci\JWT\Token; -final class Validator implements \Lcobucci\JWT\Validator +final readonly class Validator implements \Lcobucci\JWT\Validator { public function assert(Token $token, Constraint ...$constraints): void { @@ -19,7 +19,7 @@ public function assert(Token $token, Constraint ...$constraints): void $this->checkConstraint($constraint, $token, $violations); } - if ($violations) { + if ($violations !== []) { throw RequiredConstraintsViolated::fromViolations(...$violations); } } diff --git a/tests/ConfigurationTest.php b/tests/ConfigurationTest.php index 807933db..e9d815fd 100644 --- a/tests/ConfigurationTest.php +++ b/tests/ConfigurationTest.php @@ -99,24 +99,6 @@ public function builderShouldCreateABuilderWithCustomizedEncoderAndClaimFactory( self::assertEquals(BuilderImpl::new($this->encoder, ChainedFormatter::default()), $builder); } - #[PHPUnit\Test] - public function builderShouldUseBuilderFactoryWhenThatIsConfiguredWithDeprecatedSet(): void - { - $builder = $this->createMock(Builder::class); - - $config = Configuration::forSymmetricSigner( - new KeyDumpSigner(), - InMemory::plainText('private'), - ); - /** @phpstan-ignore method.deprecated */ - $config->setBuilderFactory( - static function () use ($builder): Builder { - return $builder; - }, - ); - self::assertSame($builder, $config->builder()); - } - #[PHPUnit\Test] public function builderShouldUseBuilderFactoryWhenThatIsConfigured(): void { @@ -160,19 +142,6 @@ public function parserShouldReturnAParserWithCustomizedDecoder(): void self::assertEquals(new ParserImpl($this->decoder), $parser); } - #[PHPUnit\Test] - public function parserShouldNotCreateAnInstanceIfItWasConfiguredWithDeprecatedSet(): void - { - $config = Configuration::forSymmetricSigner( - new KeyDumpSigner(), - InMemory::plainText('private'), - ); - /** @phpstan-ignore method.deprecated */ - $config->setParser($this->parser); - - self::assertSame($this->parser, $config->parser()); - } - #[PHPUnit\Test] public function parserShouldNotCreateAnInstanceIfItWasConfigured(): void { @@ -198,19 +167,6 @@ public function validatorShouldReturnTheDefaultWhenItWasNotConfigured(): void self::assertNotSame($this->validator, $validator); } - #[PHPUnit\Test] - public function validatorShouldReturnTheConfiguredValidatorWithDeprecatedSet(): void - { - $config = Configuration::forSymmetricSigner( - new KeyDumpSigner(), - InMemory::plainText('private'), - ); - /** @phpstan-ignore method.deprecated */ - $config->setValidator($this->validator); - - self::assertSame($this->validator, $config->validator()); - } - #[PHPUnit\Test] public function validatorShouldReturnTheConfiguredValidator(): void { @@ -235,19 +191,6 @@ public function validationConstraintsShouldReturnAnEmptyArrayWhenItWasNotConfigu self::assertSame([], $config->validationConstraints()); } - #[PHPUnit\Test] - public function validationConstraintsShouldReturnTheConfiguredValidatorWithDeprecatedSet(): void - { - $config = Configuration::forSymmetricSigner( - new KeyDumpSigner(), - InMemory::plainText('private'), - ); - /** @phpstan-ignore method.deprecated */ - $config->setValidationConstraints($this->validationConstraints); - - self::assertSame([$this->validationConstraints], $config->validationConstraints()); - } - #[PHPUnit\Test] public function validationConstraintsShouldReturnTheConfiguredValidator(): void { diff --git a/tests/KeyDumpSigner.php b/tests/KeyDumpSigner.php index 7f94fda0..75b086de 100644 --- a/tests/KeyDumpSigner.php +++ b/tests/KeyDumpSigner.php @@ -6,7 +6,7 @@ use Lcobucci\JWT\Signer; use Lcobucci\JWT\Signer\Key; -final class KeyDumpSigner implements Signer +final readonly class KeyDumpSigner implements Signer { public function algorithmId(): string { diff --git a/tests/Signer/Rsa/KeyValidationSigner.php b/tests/Signer/Rsa/KeyValidationSigner.php new file mode 100644 index 00000000..554d9898 --- /dev/null +++ b/tests/Signer/Rsa/KeyValidationSigner.php @@ -0,0 +1,37 @@ +createSignature($key->contents(), $key->passphrase(), $payload); + } + + public function verify(string $expected, string $payload, Key $key): bool + { + return $this->verifySignature($expected, $payload, $key->contents()); + } +} diff --git a/tests/Signer/Rsa/KeyValidationTest.php b/tests/Signer/Rsa/KeyValidationTest.php index 3bc99d78..6e7d4e4e 100644 --- a/tests/Signer/Rsa/KeyValidationTest.php +++ b/tests/Signer/Rsa/KeyValidationTest.php @@ -4,7 +4,6 @@ namespace Lcobucci\JWT\Tests\Signer\Rsa; use Lcobucci\JWT\Signer\CannotSignPayload; -use Lcobucci\JWT\Signer\Key; use Lcobucci\JWT\Signer\Key\InMemory; use Lcobucci\JWT\Signer\OpenSSL; use PHPUnit\Framework\Attributes as PHPUnit; @@ -12,7 +11,6 @@ use function openssl_error_string; -use const OPENSSL_ALGO_SHA256; use const PHP_EOL; #[PHPUnit\CoversClass(OpenSSL::class)] @@ -47,32 +45,6 @@ public function signShouldRaiseAnExceptionWhenKeyIsInvalid(): void private function algorithm(): OpenSSL { - return new class () extends OpenSSL - { - // phpcs:ignore SlevomatCodingStandard.Functions.UnusedParameter.UnusedParameter - protected function guardAgainstIncompatibleKey(int $type, int $lengthInBits): void - { - } - - public function algorithm(): int - { - return OPENSSL_ALGO_SHA256; - } - - public function algorithmId(): string - { - return 'RS256'; - } - - public function sign(string $payload, Key $key): string - { - return $this->createSignature($key->contents(), $key->passphrase(), $payload); - } - - public function verify(string $expected, string $payload, Key $key): bool - { - return $this->verifySignature($expected, $payload, $key->contents()); - } - }; + return new KeyValidationSigner(); } } diff --git a/tests/UnsupportedParser.php b/tests/UnsupportedParser.php index 85f8cb26..c0b72996 100644 --- a/tests/UnsupportedParser.php +++ b/tests/UnsupportedParser.php @@ -8,7 +8,7 @@ use Lcobucci\JWT\Token; use Lcobucci\JWT\Token\DataSet; -final class UnsupportedParser implements Parser +final readonly class UnsupportedParser implements Parser { public function parse(string $jwt): Token {