From 5bbb19066662a2bd8183c844f5060979466ec118 Mon Sep 17 00:00:00 2001 From: "Phelan, Ross" Date: Thu, 21 Nov 2024 12:34:28 +0000 Subject: [PATCH 1/2] Adding fix, adding test --- .../developer/encryption/JweEncryption.java | 8 +++++++ ...weEncryptionWithDefaultJsonEngineTest.java | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/main/java/com/mastercard/developer/encryption/JweEncryption.java b/src/main/java/com/mastercard/developer/encryption/JweEncryption.java index bfb2dfd..f3a92f1 100644 --- a/src/main/java/com/mastercard/developer/encryption/JweEncryption.java +++ b/src/main/java/com/mastercard/developer/encryption/JweEncryption.java @@ -136,6 +136,14 @@ private static DocumentContext decryptPayloadPath(DocumentContext payloadContext // Remove the input JsonParser.deleteIfExists(payloadContext, jsonPathIn); + + //Strip the parent node if empty + String jsonPathInStripped = jsonPathIn.replaceAll("." + config.getEncryptedValueFieldName() + "$", ""); + Object inJsonObjectStripped = readJsonObject(payloadContext, jsonPathIn); + if (inJsonObjectStripped == null) { + JsonParser.deleteIfExists(payloadContext, jsonPathInStripped); + } + return payloadContext; } diff --git a/src/test/java/com/mastercard/developer/encryption/JweEncryptionWithDefaultJsonEngineTest.java b/src/test/java/com/mastercard/developer/encryption/JweEncryptionWithDefaultJsonEngineTest.java index 9d9eefd..ed6bc9d 100644 --- a/src/test/java/com/mastercard/developer/encryption/JweEncryptionWithDefaultJsonEngineTest.java +++ b/src/test/java/com/mastercard/developer/encryption/JweEncryptionWithDefaultJsonEngineTest.java @@ -115,4 +115,25 @@ public void testDecryptPayload_ShouldSupportPayloadWithEncryptedValueParent() th // THEN assertPayloadEquals("{\"data\": {}}", payload); } + + @Test + public void testDecryptPayload_ShouldRemoveParentEncryptedFieldIfEmpty() throws Exception { + + // GIVEN + String encryptedPayload = "{\n" + + " \"encryptedDataParent\": {\n" + + " \"encryptedData\": \"eyJraWQiOiI3NjFiMDAzYzFlYWRlM2E1NDkwZTUwMDBkMzc4ODdiYWE1ZTZlYzBlMjI2YzA3NzA2ZTU5OTQ1MWZjMDMyYTc5IiwiY3R5IjoiYXBwbGljYXRpb24vanNvbiIsImVuYyI6IkEyNTZHQ00iLCJhbGciOiJSU0EtT0FFUC0yNTYifQ.XVy1AR51sUvwT-AtcsogQDo_klFi1EMYW8Wz7qM0e1dA3jNX5nTa38JhRcVuyVK15OenTYfg7aaH_fLjPZI1Mukd0BBnTuonh8T9CX5tbAAYx_KGPxc7a7ekBO-xXEA762eRvIIQJDZgQ_C3U39kc-XoaxC-ZYx8Va_aPBsXI1uozAfj3j5XVDnSmGAVWc2N4STTlCKbL4EO6YXASl_PrAOIVVSUrhpYvNS7GnjrP9x49tlRmTS0Dx-_MhkIAJM6H25YAuUmO-LW3gikReOUgGeY9_JtOioDs2J4ncKqugPFKr8kYF1cKnMwFv0TS9p5qR0kiF20bxRMvhbazf_Q5Q.V2Uz5-YRNq9ZIJjhRsKYIw.jB1s8rczGEj2OjU.qs4zVUf2tHML02Rglq5ncw\"\n" + + " }\n" + + "}"; + JweConfig config = getTestJweConfigBuilder() + .withEncryptedValueFieldName("encryptedData") + .withDecryptionPath("$.encryptedDataParent.encryptedData", "$.unencrypted") + .build(); + + // WHEN + String payload = JweEncryption.decryptPayload(encryptedPayload, config); + + // THEN + assertPayloadEquals("{\"unencrypted\":{\"data\": {}}}", payload); + } } From 001a49914b122e969dafb7fd5c188ffc512b61e2 Mon Sep 17 00:00:00 2001 From: "Phelan, Ross" Date: Thu, 21 Nov 2024 14:06:16 +0000 Subject: [PATCH 2/2] Fixing tests --- .../java/com/mastercard/developer/encryption/JweEncryption.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/mastercard/developer/encryption/JweEncryption.java b/src/main/java/com/mastercard/developer/encryption/JweEncryption.java index f3a92f1..58e3271 100644 --- a/src/main/java/com/mastercard/developer/encryption/JweEncryption.java +++ b/src/main/java/com/mastercard/developer/encryption/JweEncryption.java @@ -140,7 +140,7 @@ private static DocumentContext decryptPayloadPath(DocumentContext payloadContext //Strip the parent node if empty String jsonPathInStripped = jsonPathIn.replaceAll("." + config.getEncryptedValueFieldName() + "$", ""); Object inJsonObjectStripped = readJsonObject(payloadContext, jsonPathIn); - if (inJsonObjectStripped == null) { + if (!jsonPathInStripped.equals("$") && !jsonPathInStripped.contains("[") && inJsonObjectStripped == null) { JsonParser.deleteIfExists(payloadContext, jsonPathInStripped); }