From 266b724434af3cf3dd43232774b10839fd166448 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Mon, 28 Oct 2024 15:31:32 +0100 Subject: [PATCH 1/2] Use `readonly` class annotation where possible --- .../Http/ClientFingerprint/Configuration.php | 5 ++--- .../Http/ClientFingerprint/RemoteAddr.php | 3 +-- .../Http/ClientFingerprint/SameOriginRequest.php | 14 +++++--------- .../Http/ClientFingerprint/UserAgent.php | 3 +-- src/Storageless/Http/SessionMiddleware.php | 5 ++--- 5 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/Storageless/Http/ClientFingerprint/Configuration.php b/src/Storageless/Http/ClientFingerprint/Configuration.php index c243dabe..0f6f58a1 100644 --- a/src/Storageless/Http/ClientFingerprint/Configuration.php +++ b/src/Storageless/Http/ClientFingerprint/Configuration.php @@ -4,11 +4,10 @@ namespace PSR7Sessions\Storageless\Http\ClientFingerprint; -/** @immutable */ -final class Configuration +final readonly class Configuration { /** @var list */ - private readonly array $sources; + private array $sources; /** * @param list ...$sources diff --git a/src/Storageless/Http/ClientFingerprint/RemoteAddr.php b/src/Storageless/Http/ClientFingerprint/RemoteAddr.php index fec669dd..6a5ecba6 100644 --- a/src/Storageless/Http/ClientFingerprint/RemoteAddr.php +++ b/src/Storageless/Http/ClientFingerprint/RemoteAddr.php @@ -9,8 +9,7 @@ use function array_key_exists; use function is_string; -/** @immutable */ -final class RemoteAddr implements Source +final readonly class RemoteAddr implements Source { private const SERVER_PARAM_NAME = 'REMOTE_ADDR'; diff --git a/src/Storageless/Http/ClientFingerprint/SameOriginRequest.php b/src/Storageless/Http/ClientFingerprint/SameOriginRequest.php index b371d6ba..cdb039a2 100644 --- a/src/Storageless/Http/ClientFingerprint/SameOriginRequest.php +++ b/src/Storageless/Http/ClientFingerprint/SameOriginRequest.php @@ -19,22 +19,18 @@ use const JSON_THROW_ON_ERROR; -/** - * @internal - * - * @immutable - */ -final class SameOriginRequest implements Constraint +/** @internal */ +final readonly class SameOriginRequest implements Constraint { public const CLAIM = 'fp'; /** @var list */ - private readonly array $sources; + private array $sources; /** @var non-empty-string */ - private readonly string $currentRequestFingerprint; + private string $currentRequestFingerprint; public function __construct( - private readonly Configuration $configuration, + private Configuration $configuration, ServerRequestInterface $serverRequest, ) { $this->sources = $this->configuration->sources(); diff --git a/src/Storageless/Http/ClientFingerprint/UserAgent.php b/src/Storageless/Http/ClientFingerprint/UserAgent.php index 5463b62e..ea379d01 100644 --- a/src/Storageless/Http/ClientFingerprint/UserAgent.php +++ b/src/Storageless/Http/ClientFingerprint/UserAgent.php @@ -6,8 +6,7 @@ use Psr\Http\Message\ServerRequestInterface; -/** @immutable */ -final class UserAgent implements Source +final readonly class UserAgent implements Source { public function extractFrom(ServerRequestInterface $request): string { diff --git a/src/Storageless/Http/SessionMiddleware.php b/src/Storageless/Http/SessionMiddleware.php index e7240984..2c3f6870 100644 --- a/src/Storageless/Http/SessionMiddleware.php +++ b/src/Storageless/Http/SessionMiddleware.php @@ -43,14 +43,13 @@ use function sprintf; -/** @immutable */ -final class SessionMiddleware implements MiddlewareInterface +final readonly class SessionMiddleware implements MiddlewareInterface { public const SESSION_CLAIM = 'session-data'; public const SESSION_ATTRIBUTE = 'session'; public function __construct( - private readonly Configuration $config, + private Configuration $config, ) { } From e4c80ce827d1912043410a790378c392b67f11ec Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Mon, 28 Oct 2024 15:41:52 +0100 Subject: [PATCH 2/2] Move from `@immutable` to more specific `@psalm-immutable` --- src/Storageless/Http/ClientFingerprint/Configuration.php | 1 + src/Storageless/Http/ClientFingerprint/RemoteAddr.php | 1 + .../Http/ClientFingerprint/SameOriginRequest.php | 6 +++++- src/Storageless/Http/ClientFingerprint/UserAgent.php | 1 + src/Storageless/Http/Configuration.php | 2 +- src/Storageless/Http/SessionMiddleware.php | 1 + 6 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Storageless/Http/ClientFingerprint/Configuration.php b/src/Storageless/Http/ClientFingerprint/Configuration.php index 0f6f58a1..616af9fd 100644 --- a/src/Storageless/Http/ClientFingerprint/Configuration.php +++ b/src/Storageless/Http/ClientFingerprint/Configuration.php @@ -4,6 +4,7 @@ namespace PSR7Sessions\Storageless\Http\ClientFingerprint; +/** @psalm-immutable */ final readonly class Configuration { /** @var list */ diff --git a/src/Storageless/Http/ClientFingerprint/RemoteAddr.php b/src/Storageless/Http/ClientFingerprint/RemoteAddr.php index 6a5ecba6..252e4052 100644 --- a/src/Storageless/Http/ClientFingerprint/RemoteAddr.php +++ b/src/Storageless/Http/ClientFingerprint/RemoteAddr.php @@ -9,6 +9,7 @@ use function array_key_exists; use function is_string; +/** @psalm-immutable */ final readonly class RemoteAddr implements Source { private const SERVER_PARAM_NAME = 'REMOTE_ADDR'; diff --git a/src/Storageless/Http/ClientFingerprint/SameOriginRequest.php b/src/Storageless/Http/ClientFingerprint/SameOriginRequest.php index cdb039a2..bf5cb6b6 100644 --- a/src/Storageless/Http/ClientFingerprint/SameOriginRequest.php +++ b/src/Storageless/Http/ClientFingerprint/SameOriginRequest.php @@ -19,7 +19,11 @@ use const JSON_THROW_ON_ERROR; -/** @internal */ +/** + * @internal + * + * @psalm-immutable + */ final readonly class SameOriginRequest implements Constraint { public const CLAIM = 'fp'; diff --git a/src/Storageless/Http/ClientFingerprint/UserAgent.php b/src/Storageless/Http/ClientFingerprint/UserAgent.php index ea379d01..2009a97c 100644 --- a/src/Storageless/Http/ClientFingerprint/UserAgent.php +++ b/src/Storageless/Http/ClientFingerprint/UserAgent.php @@ -6,6 +6,7 @@ use Psr\Http\Message\ServerRequestInterface; +/** @psalm-immutable */ final readonly class UserAgent implements Source { public function extractFrom(ServerRequestInterface $request): string diff --git a/src/Storageless/Http/Configuration.php b/src/Storageless/Http/Configuration.php index e88468b3..abd64ff3 100644 --- a/src/Storageless/Http/Configuration.php +++ b/src/Storageless/Http/Configuration.php @@ -27,7 +27,7 @@ use Lcobucci\JWT\Configuration as JwtConfig; use PSR7Sessions\Storageless\Http\ClientFingerprint\Configuration as FingerprintConfig; -/** @immutable */ +/** @psalm-immutable */ final class Configuration { private JwtConfig $jwtConfiguration; diff --git a/src/Storageless/Http/SessionMiddleware.php b/src/Storageless/Http/SessionMiddleware.php index 2c3f6870..a01d0afd 100644 --- a/src/Storageless/Http/SessionMiddleware.php +++ b/src/Storageless/Http/SessionMiddleware.php @@ -43,6 +43,7 @@ use function sprintf; +/** @psalm-immutable */ final readonly class SessionMiddleware implements MiddlewareInterface { public const SESSION_CLAIM = 'session-data';