From c868fd8796c1b4e36b35a111ba5f9dc7ab3ecc5e Mon Sep 17 00:00:00 2001 From: Nithya Ganesh Date: Tue, 23 May 2023 15:48:01 -0400 Subject: [PATCH 1/3] add custom serializer to handle regex in json string --- .../sdk/credential/models/RegexSerializer.kt | 19 +++++++++++++++++++ .../models/presentationexchange/Filter.kt | 2 ++ 2 files changed, 21 insertions(+) create mode 100644 sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt diff --git a/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt b/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt new file mode 100644 index 00000000..52ab4f9c --- /dev/null +++ b/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved + +package com.microsoft.did.sdk.credential.models + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +class RegexSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("WithCustomDefault", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: String) = encoder.encodeString(value) + + override fun deserialize(decoder: Decoder) = decoder.decodeString().replace("\\", "").replace("/gi", "").replace("/","") +} diff --git a/sdk/src/main/java/com/microsoft/did/sdk/credential/service/models/presentationexchange/Filter.kt b/sdk/src/main/java/com/microsoft/did/sdk/credential/service/models/presentationexchange/Filter.kt index a132d548..d64cf7e8 100644 --- a/sdk/src/main/java/com/microsoft/did/sdk/credential/service/models/presentationexchange/Filter.kt +++ b/sdk/src/main/java/com/microsoft/did/sdk/credential/service/models/presentationexchange/Filter.kt @@ -2,10 +2,12 @@ package com.microsoft.did.sdk.credential.service.models.presentationexchange +import com.microsoft.did.sdk.credential.models.RegexSerializer import kotlinx.serialization.Serializable @Serializable data class Filter( val type: String, + @Serializable(with = RegexSerializer::class) val pattern: String ) From 9017cf8faea53d2f79134cb8686a312ae34c25f6 Mon Sep 17 00:00:00 2001 From: Nithya Ganesh Date: Tue, 30 May 2023 22:56:04 -0400 Subject: [PATCH 2/3] remove the flags from regex during json serialization --- .../com/microsoft/did/sdk/credential/models/RegexSerializer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt b/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt index 52ab4f9c..032a3d7a 100644 --- a/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt +++ b/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt @@ -15,5 +15,5 @@ class RegexSerializer : KSerializer { override fun serialize(encoder: Encoder, value: String) = encoder.encodeString(value) - override fun deserialize(decoder: Decoder) = decoder.decodeString().replace("\\", "").replace("/gi", "").replace("/","") + override fun deserialize(decoder: Decoder): String = decoder.decodeString().split("/")[1] } From db9889071a5473a55bb1ddcaacd1ce24107c8dac Mon Sep 17 00:00:00 2001 From: Nithya Ganesh Date: Wed, 31 May 2023 11:22:06 -0400 Subject: [PATCH 3/3] sanitize regex in constraints --- .../com/microsoft/did/sdk/credential/models/RegexSerializer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt b/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt index 032a3d7a..aa9ea846 100644 --- a/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt +++ b/sdk/src/main/java/com/microsoft/did/sdk/credential/models/RegexSerializer.kt @@ -15,5 +15,5 @@ class RegexSerializer : KSerializer { override fun serialize(encoder: Encoder, value: String) = encoder.encodeString(value) - override fun deserialize(decoder: Decoder): String = decoder.decodeString().split("/")[1] + override fun deserialize(decoder: Decoder): String = decoder.decodeString().split("/").first { it.isNotEmpty() } }