From e1582be38a0001c0c00524066bec587ff989abc5 Mon Sep 17 00:00:00 2001 From: queue-it Date: Fri, 21 Aug 2026 11:07:32 +0000 Subject: [PATCH] Release v1.1.1 ## Release Notes ### What's Changed - Bug fixes and improvements ### Breaking Changes - None ### Dependencies - Updated dependencies to latest stable versions --- composer.lock | 2 +- src/IEnqueueToken.php | 2 + src/Models/TokenOrigin.php | 1 + src/Payload.php | 2 + tests/EnqueueTokenPayloadTest.php | 117 ++++++++++++++++++++++++++++++ tests/EnqueueTokenTest.php | 94 ++++++++++++++++++++++++ 6 files changed, 217 insertions(+), 1 deletion(-) diff --git a/composer.lock b/composer.lock index f1306d2..473bcaa 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2d977581d45ce562de2d593e1c7c2abf", + "content-hash": "61ce48b3770b6f15279c222a9d28465c", "packages": [], "packages-dev": [ { diff --git a/src/IEnqueueToken.php b/src/IEnqueueToken.php index dfa5eef..af49698 100644 --- a/src/IEnqueueToken.php +++ b/src/IEnqueueToken.php @@ -2,6 +2,8 @@ namespace QueueIT\QueueToken; +use QueueIT\QueueToken\IEnqueueTokenPayload; + interface IEnqueueToken { public function getTokenIdentifier(): string; diff --git a/src/Models/TokenOrigin.php b/src/Models/TokenOrigin.php index b199862..594c8b3 100644 --- a/src/Models/TokenOrigin.php +++ b/src/Models/TokenOrigin.php @@ -6,4 +6,5 @@ class TokenOrigin { const CONNECTOR = 'Connector'; const INVITE_ONLY = 'InviteOnly'; + const AKAMAI_BOT_MANAGER_HEADER_VALIDATOR = 'AkamaiBotManagerHeaderValidator'; } diff --git a/src/Payload.php b/src/Payload.php index 227b309..25ffb7e 100644 --- a/src/Payload.php +++ b/src/Payload.php @@ -2,6 +2,8 @@ namespace QueueIT\QueueToken; +use QueueIT\QueueToken\EnqueueTokenPayloadGenerator; + class Payload { public static function enqueue() diff --git a/tests/EnqueueTokenPayloadTest.php b/tests/EnqueueTokenPayloadTest.php index 1fb68a9..ce3f004 100644 --- a/tests/EnqueueTokenPayloadTest.php +++ b/tests/EnqueueTokenPayloadTest.php @@ -7,6 +7,7 @@ use QueueIT\QueueToken\Helpers\Utils; use QueueIT\QueueToken\Payload; use QueueIT\QueueToken\EnqueueTokenPayload; +use QueueIT\QueueToken\Models\TokenOrigin; class EnqueueTokenPayloadTest extends TestCase { @@ -243,4 +244,120 @@ public function testEncryptedCorrectly() $this->assertEquals($expectedEncryptedPayload, $actualEncryptedPayload); $this->assertEquals($payload, $decryptPayload); } + + public function testGeneratePayloadWithInviteOnlyOrigin() + { + $expectedKey = "myKey"; + $expectedOrigin = TokenOrigin::INVITE_ONLY; + + $instance = Payload::Enqueue() + ->WithKey($expectedKey) + ->WithOrigin($expectedOrigin) + ->Generate(); + + $this->assertEquals($expectedKey, $instance->getKey()); + $this->assertEquals($expectedOrigin, $instance->getTokenOrigin()); + } + + public function testGeneratePayloadWithAkamaiBotManagerHeaderValidatorOrigin() + { + $expectedKey = "myKey"; + $expectedOrigin = TokenOrigin::AKAMAI_BOT_MANAGER_HEADER_VALIDATOR; + + $instance = Payload::Enqueue() + ->WithKey($expectedKey) + ->WithOrigin($expectedOrigin) + ->Generate(); + + $this->assertEquals($expectedKey, $instance->getKey()); + $this->assertEquals($expectedOrigin, $instance->getTokenOrigin()); + } + + public function testGeneratePayloadWithConnectorOrigin() + { + $expectedKey = "myKey"; + $expectedOrigin = TokenOrigin::CONNECTOR; + + $instance = Payload::Enqueue() + ->WithKey($expectedKey) + ->WithOrigin($expectedOrigin) + ->Generate(); + + $this->assertEquals($expectedKey, $instance->getKey()); + $this->assertEquals($expectedOrigin, $instance->getTokenOrigin()); + } + + public function testSerializeWithInviteOnlyOrigin() + { + $expectedJson = '{"r":0.456,"k":"myKey","o":"InviteOnly"}'; + + $instance = Payload::Enqueue() + ->WithKey("myKey") + ->WithRelativeQuality(0.456) + ->WithOrigin(TokenOrigin::INVITE_ONLY) + ->Generate(); + $actualJson = Utils::uint8ArrayToString($instance->Serialize()); + + $this->assertEquals($expectedJson, $actualJson); + } + + public function testSerializeWithAkamaiBotManagerHeaderValidatorOrigin() + { + $expectedJson = '{"r":0.456,"k":"myKey","o":"AkamaiBotManagerHeaderValidator"}'; + + $instance = Payload::Enqueue() + ->WithKey("myKey") + ->WithRelativeQuality(0.456) + ->WithOrigin(TokenOrigin::AKAMAI_BOT_MANAGER_HEADER_VALIDATOR) + ->Generate(); + $actualJson = Utils::uint8ArrayToString($instance->Serialize()); + + $this->assertEquals($expectedJson, $actualJson); + } + + public function testSerializeWithConnectorOrigin() + { + $expectedJson = '{"r":0.456,"k":"myKey","o":"Connector"}'; + + $instance = Payload::Enqueue() + ->WithKey("myKey") + ->WithRelativeQuality(0.456) + ->WithOrigin(TokenOrigin::CONNECTOR) + ->Generate(); + $actualJson = Utils::uint8ArrayToString($instance->Serialize()); + + $this->assertEquals($expectedJson, $actualJson); + } + + public function testSerializeWithInviteOnlyOriginAndCustomData() + { + $expectedJson = '{"r":0.456,"k":"myKey","cd":{"key1":"Value1","key2":"Value2"},"o":"InviteOnly"}'; + + $instance = Payload::Enqueue() + ->WithKey("myKey") + ->WithRelativeQuality(0.456) + ->WithCustomData("key1", "Value1") + ->WithCustomData("key2", "Value2") + ->WithOrigin(TokenOrigin::INVITE_ONLY) + ->Generate(); + $actualJson = Utils::uint8ArrayToString($instance->Serialize()); + + $this->assertEquals($expectedJson, $actualJson); + } + + public function testSerializeWithAkamaiBotManagerOriginAndCustomData() + { + $expectedJson = '{"r":0.456,"k":"myKey","cd":{"key1":"Value1","key2":"Value2"},"o":"AkamaiBotManagerHeaderValidator"}'; + + $instance = Payload::Enqueue() + ->WithKey("myKey") + ->WithRelativeQuality(0.456) + ->WithCustomData("key1", "Value1") + ->WithCustomData("key2", "Value2") + ->WithOrigin(TokenOrigin::AKAMAI_BOT_MANAGER_HEADER_VALIDATOR) + ->Generate(); + $actualJson = Utils::uint8ArrayToString($instance->Serialize()); + + $this->assertEquals($expectedJson, $actualJson); + } } diff --git a/tests/EnqueueTokenTest.php b/tests/EnqueueTokenTest.php index e9ca44d..a5fb014 100644 --- a/tests/EnqueueTokenTest.php +++ b/tests/EnqueueTokenTest.php @@ -13,6 +13,7 @@ use QueueIT\QueueToken\Models\TokenVersion; use QueueIT\QueueToken\Models\EncryptionType; use QueueIT\QueueToken\Models\HeaderDto; +use QueueIT\QueueToken\Models\TokenOrigin; use QueueIT\QueueToken\Tests\SampleTokenValues; @@ -389,4 +390,97 @@ public function testSecondTokenGenerationDoesNotModifyFirstToken() $parsedToken1 = Token::parse($token1String, SampleTokenValues::$secretKey); $this->assertEquals("event1", $parsedToken1->eventId); } + + public function testCreateTokenWithInviteOnlyOriginAndParse() + { + $secret = SampleTokenValues::$secretKey; + + $payload = Payload::enqueue() + ->withKey('TestKey') + ->withRelativeQuality(0.5) + ->withOrigin(TokenOrigin::INVITE_ONLY) + ->generate(); + + $token = Token::enqueue(SampleTokenValues::$customerId) + ->withPayload($payload) + ->withEventId('testevent') + ->generate($secret); + + $tokenString = $token->getToken(); + $parsed = Token::parse($tokenString, $secret); + + $this->assertNotNull($parsed->getPayload()); + $this->assertEquals(TokenOrigin::INVITE_ONLY, $parsed->getPayload()->getTokenOrigin()); + $this->assertEquals('TestKey', $parsed->getPayload()->getKey()); + $this->assertEquals(0.5, $parsed->getPayload()->getRelativeQuality()); + } + + public function testCreateTokenWithAkamaiBotManagerOriginAndParse() + { + $secret = SampleTokenValues::$secretKey; + + $payload = Payload::enqueue() + ->withKey('BotManagerKey') + ->withRelativeQuality(0.75) + ->withCustomData('detector', 'bot-manager') + ->withOrigin(TokenOrigin::AKAMAI_BOT_MANAGER_HEADER_VALIDATOR) + ->generate(); + + $token = Token::enqueue(SampleTokenValues::$customerId) + ->withPayload($payload) + ->withEventId('bot-test-event') + ->generate($secret); + + $tokenString = $token->getToken(); + $parsed = Token::parse($tokenString, $secret); + + $this->assertNotNull($parsed->getPayload()); + $this->assertEquals(TokenOrigin::AKAMAI_BOT_MANAGER_HEADER_VALIDATOR, $parsed->getPayload()->getTokenOrigin()); + $this->assertEquals('BotManagerKey', $parsed->getPayload()->getKey()); + $this->assertEquals(0.75, $parsed->getPayload()->getRelativeQuality()); + $this->assertEquals('bot-manager', $parsed->getPayload()->getCustomData()['detector']); + } + + public function testCreateTokenWithConnectorOriginAndParse() + { + $secret = SampleTokenValues::$secretKey; + + $payload = Payload::enqueue() + ->withKey('ConnectorKey') + ->withRelativeQuality(0.25) + ->withOrigin(TokenOrigin::CONNECTOR) + ->generate(); + + $token = Token::enqueue(SampleTokenValues::$customerId) + ->withPayload($payload) + ->withEventId('connector-event') + ->generate($secret); + + $tokenString = $token->getToken(); + $parsed = Token::parse($tokenString, $secret); + + $this->assertNotNull($parsed->getPayload()); + $this->assertEquals(TokenOrigin::CONNECTOR, $parsed->getPayload()->getTokenOrigin()); + $this->assertEquals('ConnectorKey', $parsed->getPayload()->getKey()); + $this->assertEquals(0.25, $parsed->getPayload()->getRelativeQuality()); + } + + public function testTokenOriginDefaultsToConnector() + { + $secret = SampleTokenValues::$secretKey; + + $payload = Payload::enqueue() + ->withKey('DefaultKey') + ->generate(); + + $token = Token::enqueue(SampleTokenValues::$customerId) + ->withPayload($payload) + ->generate($secret); + + $tokenString = $token->getToken(); + $parsed = Token::parse($tokenString, $secret); + + $this->assertNotNull($parsed->getPayload()); + $this->assertEquals(TokenOrigin::CONNECTOR, $parsed->getPayload()->getTokenOrigin()); + } }