From a41e717e557c9eed25ca0e06c6693b84cc773c9e Mon Sep 17 00:00:00 2001 From: Stefano Hu <76391491+shuyec@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:47:41 +0100 Subject: [PATCH 1/8] Add ProducerJWKKeySQL aggregators --- .../producerJWKKeyAggregators.ts | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 packages/readmodel/src/authorization/producerJWKKeyAggregators.ts diff --git a/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts new file mode 100644 index 0000000000..9a6b53382f --- /dev/null +++ b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts @@ -0,0 +1,31 @@ +import { + ProducerJWKKey, + ProducerJWKKeySQL, + WithMetadata, +} from "pagopa-interop-models"; + +export const producerJWKKeySQLToProducerJWKKey = ({ + producer_keychain_id, + version, + alg, + e, + kid, + kty, + n, + use, + ...rest +}: ProducerJWKKeySQL): WithMetadata => { + void (rest satisfies Record); + return { + data: { + producerKeychainId: producer_keychain_id, + alg, + e, + kid, + kty, + n, + use, + }, + metadata: { version }, + }; +}; From 19ca5204d475ea1dee69a1177747f43134a4f078 Mon Sep 17 00:00:00 2001 From: Stefano Hu <76391491+shuyec@users.noreply.github.com> Date: Mon, 10 Feb 2025 12:39:36 +0100 Subject: [PATCH 2/8] Fix metadata_version --- .../readmodel/src/authorization/producerJWKKeyAggregators.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts index 9a6b53382f..2220601337 100644 --- a/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts +++ b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts @@ -6,7 +6,7 @@ import { export const producerJWKKeySQLToProducerJWKKey = ({ producer_keychain_id, - version, + metadata_version, alg, e, kid, @@ -26,6 +26,6 @@ export const producerJWKKeySQLToProducerJWKKey = ({ n, use, }, - metadata: { version }, + metadata: { version: metadata_version }, }; }; From a0534b38f6cc028ac9be4abe4fd0bc2574eca3cb Mon Sep 17 00:00:00 2001 From: Stefano Hu <76391491+shuyec@users.noreply.github.com> Date: Mon, 17 Feb 2025 12:14:59 +0100 Subject: [PATCH 3/8] Update producer jwk key aggregator to Drizzle types --- .../src/authorization/producerJWKKeyAggregators.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts index 2220601337..31e2205625 100644 --- a/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts +++ b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts @@ -1,12 +1,13 @@ import { ProducerJWKKey, - ProducerJWKKeySQL, + unsafeBrandId, WithMetadata, } from "pagopa-interop-models"; +import { ProducerJWKKeySQL } from "../types.js"; export const producerJWKKeySQLToProducerJWKKey = ({ - producer_keychain_id, - metadata_version, + producerKeychainId, + metadataVersion, alg, e, kid, @@ -18,7 +19,7 @@ export const producerJWKKeySQLToProducerJWKKey = ({ void (rest satisfies Record); return { data: { - producerKeychainId: producer_keychain_id, + producerKeychainId: unsafeBrandId(producerKeychainId), alg, e, kid, @@ -26,6 +27,6 @@ export const producerJWKKeySQLToProducerJWKKey = ({ n, use, }, - metadata: { version: metadata_version }, + metadata: { version: metadataVersion }, }; }; From 4a93a2bf376e2e4febe71986b180ad123ba955b3 Mon Sep 17 00:00:00 2001 From: Stefano Hu <76391491+shuyec@users.noreply.github.com> Date: Wed, 19 Feb 2025 15:54:28 +0100 Subject: [PATCH 4/8] Fix models imports --- .../readmodel/src/authorization/producerJWKKeyAggregators.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts index 31e2205625..ddd177d075 100644 --- a/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts +++ b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts @@ -3,7 +3,7 @@ import { unsafeBrandId, WithMetadata, } from "pagopa-interop-models"; -import { ProducerJWKKeySQL } from "../types.js"; +import { ProducerJWKKeySQL } from "pagopa-interop-readmodel-models"; export const producerJWKKeySQLToProducerJWKKey = ({ producerKeychainId, From 73eb64f3be5eda05ae9eb3b2ae53a774803c7288 Mon Sep 17 00:00:00 2001 From: Stefano Hu <76391491+shuyec@users.noreply.github.com> Date: Wed, 19 Feb 2025 17:20:34 +0100 Subject: [PATCH 5/8] Add producer JWK key aggregator test --- .../test/producerJWKKeyAggregator.test.ts | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 packages/readmodel/test/producerJWKKeyAggregator.test.ts diff --git a/packages/readmodel/test/producerJWKKeyAggregator.test.ts b/packages/readmodel/test/producerJWKKeyAggregator.test.ts new file mode 100644 index 0000000000..919c963e18 --- /dev/null +++ b/packages/readmodel/test/producerJWKKeyAggregator.test.ts @@ -0,0 +1,42 @@ +import crypto from "crypto"; +import { keyToProducerJWKKey } from "pagopa-interop-commons"; +import { + getMockProducerKeychain, + getMockKey, +} from "pagopa-interop-commons-test"; +import { describe, it, expect } from "vitest"; +import { ProducerJWKKey, WithMetadata } from "pagopa-interop-models"; +import { splitProducerJWKKeyIntoObjectsSQL } from "../src/authorization/producerJWKKeySplitters.js"; +import { producerJWKKeySQLToProducerJWKKey } from "../src/authorization/producerJWKKeyAggregators.js"; + +describe("Producer JWK key aggregator", () => { + it("should convert a producer JWK key into producer JWK key SQL objects", () => { + const publicKey = crypto.generateKeyPairSync("rsa", { + modulusLength: 2048, + }).publicKey; + + const base64Key = Buffer.from( + publicKey.export({ type: "pkcs1", format: "pem" }) + ).toString("base64url"); + + const producerKeychain = getMockProducerKeychain(); + const key = { + ...getMockKey(), + encodedPem: base64Key, + }; + const producerJWKKey: WithMetadata = { + data: keyToProducerJWKKey(key, producerKeychain.id), + metadata: { version: 1 }, + }; + + const producerJWKKeySQL = splitProducerJWKKeyIntoObjectsSQL( + producerJWKKey.data, + 1 + ); + + const aggregatedProducerJWKKey = + producerJWKKeySQLToProducerJWKKey(producerJWKKeySQL); + + expect(aggregatedProducerJWKKey).toEqual(producerJWKKey); + }); +}); From 8337774f143857e2f662ef2de82e18b6998094b8 Mon Sep 17 00:00:00 2001 From: Stefano Hu <76391491+shuyec@users.noreply.github.com> Date: Wed, 19 Feb 2025 17:24:50 +0100 Subject: [PATCH 6/8] Fix producer JWK key aggregator test description --- packages/readmodel/test/producerJWKKeyAggregator.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/readmodel/test/producerJWKKeyAggregator.test.ts b/packages/readmodel/test/producerJWKKeyAggregator.test.ts index 919c963e18..e48000885d 100644 --- a/packages/readmodel/test/producerJWKKeyAggregator.test.ts +++ b/packages/readmodel/test/producerJWKKeyAggregator.test.ts @@ -10,7 +10,7 @@ import { splitProducerJWKKeyIntoObjectsSQL } from "../src/authorization/producer import { producerJWKKeySQLToProducerJWKKey } from "../src/authorization/producerJWKKeyAggregators.js"; describe("Producer JWK key aggregator", () => { - it("should convert a producer JWK key into producer JWK key SQL objects", () => { + it("should convert a producer JWK key SQL object into a business logic producer JWK key", () => { const publicKey = crypto.generateKeyPairSync("rsa", { modulusLength: 2048, }).publicKey; From 5a1206ca25e7b2929beead37effeb62994687089 Mon Sep 17 00:00:00 2001 From: Stefano Hu <76391491+shuyec@users.noreply.github.com> Date: Fri, 21 Feb 2025 11:23:10 +0100 Subject: [PATCH 7/8] Replace toEqual with toMatchObject --- packages/readmodel/test/producerJWKKeyAggregator.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/readmodel/test/producerJWKKeyAggregator.test.ts b/packages/readmodel/test/producerJWKKeyAggregator.test.ts index e48000885d..0085d83aeb 100644 --- a/packages/readmodel/test/producerJWKKeyAggregator.test.ts +++ b/packages/readmodel/test/producerJWKKeyAggregator.test.ts @@ -37,6 +37,6 @@ describe("Producer JWK key aggregator", () => { const aggregatedProducerJWKKey = producerJWKKeySQLToProducerJWKKey(producerJWKKeySQL); - expect(aggregatedProducerJWKKey).toEqual(producerJWKKey); + expect(aggregatedProducerJWKKey).toMatchObject(producerJWKKey); }); }); From 83cc9fc1804b3edf36c8cd2085caba346be04a97 Mon Sep 17 00:00:00 2001 From: Paolo Manca Date: Fri, 21 Feb 2025 19:50:40 +0100 Subject: [PATCH 8/8] adding aggregateClientJWKKeyArray, rename aggregateProducerJWKKey --- .../src/authorization/producerJWKKeyAggregators.ts | 7 ++++++- packages/readmodel/test/producerJWKKeyAggregator.test.ts | 5 ++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts index ddd177d075..b7781f3e58 100644 --- a/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts +++ b/packages/readmodel/src/authorization/producerJWKKeyAggregators.ts @@ -5,7 +5,12 @@ import { } from "pagopa-interop-models"; import { ProducerJWKKeySQL } from "pagopa-interop-readmodel-models"; -export const producerJWKKeySQLToProducerJWKKey = ({ +export const aggregateClientJWKKeyArray = ( + producersJWKKeySQL: ProducerJWKKeySQL[] +): Array> => + producersJWKKeySQL.map(aggregateProducerJWKKey); + +export const aggregateProducerJWKKey = ({ producerKeychainId, metadataVersion, alg, diff --git a/packages/readmodel/test/producerJWKKeyAggregator.test.ts b/packages/readmodel/test/producerJWKKeyAggregator.test.ts index 0085d83aeb..a02b5d17f7 100644 --- a/packages/readmodel/test/producerJWKKeyAggregator.test.ts +++ b/packages/readmodel/test/producerJWKKeyAggregator.test.ts @@ -7,7 +7,7 @@ import { import { describe, it, expect } from "vitest"; import { ProducerJWKKey, WithMetadata } from "pagopa-interop-models"; import { splitProducerJWKKeyIntoObjectsSQL } from "../src/authorization/producerJWKKeySplitters.js"; -import { producerJWKKeySQLToProducerJWKKey } from "../src/authorization/producerJWKKeyAggregators.js"; +import { aggregateProducerJWKKey } from "../src/authorization/producerJWKKeyAggregators.js"; describe("Producer JWK key aggregator", () => { it("should convert a producer JWK key SQL object into a business logic producer JWK key", () => { @@ -34,8 +34,7 @@ describe("Producer JWK key aggregator", () => { 1 ); - const aggregatedProducerJWKKey = - producerJWKKeySQLToProducerJWKKey(producerJWKKeySQL); + const aggregatedProducerJWKKey = aggregateProducerJWKKey(producerJWKKeySQL); expect(aggregatedProducerJWKKey).toMatchObject(producerJWKKey); });