diff --git a/vck-openid/src/commonMain/kotlin/at/asitplus/wallet/lib/oidc/RequestParameterFrom.kt b/vck-openid/src/commonMain/kotlin/at/asitplus/wallet/lib/oidc/RequestParameterFrom.kt index 81410611..06b8104d 100644 --- a/vck-openid/src/commonMain/kotlin/at/asitplus/wallet/lib/oidc/RequestParameterFrom.kt +++ b/vck-openid/src/commonMain/kotlin/at/asitplus/wallet/lib/oidc/RequestParameterFrom.kt @@ -1,26 +1,11 @@ package at.asitplus.wallet.lib.oidc import at.asitplus.openid.RequestParameters -import kotlinx.serialization.DeserializationStrategy +import at.asitplus.openid.RequestParametersSerializer import kotlinx.serialization.Serializable -import kotlinx.serialization.json.JsonContentPolymorphicSerializer -import kotlinx.serialization.json.JsonElement -import kotlinx.serialization.json.jsonObject @Serializable sealed interface RequestParametersFrom { + @Serializable(with = RequestParametersSerializer::class) val parameters: RequestParameters -} - -object RequestParametersFromSerializer : - JsonContentPolymorphicSerializer(RequestParametersFrom::class) { - override fun selectDeserializer(element: JsonElement): DeserializationStrategy { - val parameters = element.jsonObject["parameters"]?.jsonObject - return parameters?.let { - when { - "signatureQualifier" in it -> SignatureRequestParametersFrom.serializer() - else -> AuthenticationRequestParametersFrom.serializer() - } - } ?: throw Exception("Invalid parameters") - } } \ No newline at end of file diff --git a/vck-openid/src/commonMain/kotlin/at/asitplus/wallet/lib/oidc/helper/RequestParser.kt b/vck-openid/src/commonMain/kotlin/at/asitplus/wallet/lib/oidc/helper/RequestParser.kt index c74f5582..3b947704 100644 --- a/vck-openid/src/commonMain/kotlin/at/asitplus/wallet/lib/oidc/helper/RequestParser.kt +++ b/vck-openid/src/commonMain/kotlin/at/asitplus/wallet/lib/oidc/helper/RequestParser.kt @@ -66,29 +66,26 @@ class RequestParser( is SignatureRequestParameters -> SignatureRequestParametersFrom.Uri(it, result) - .also { Napier.d { "It did make a difference for URI" } } } } // } }.onFailure { it.printStackTrace() }.getOrNull() ?: catching { // maybe it is already a JSON string -// val params = AuthenticationRequestParameters.deserialize(input).getOrThrow() -// AuthenticationRequestParametersFrom.Json(input, params) when (val params = jsonSerializer.decodeFromString(RequestParametersSerializer, input)) { is AuthenticationRequestParameters -> AuthenticationRequestParametersFrom.Json(input, params) is SignatureRequestParameters -> SignatureRequestParametersFrom.Json(input, params) - .also { Napier.d { "It did make a difference for Json" } } } }.getOrNull() ?: throw OAuth2Exception(Errors.INVALID_REQUEST) .also { Napier.w("Could not parse authentication request: $input") } - Napier.d { "it is of type ${parsedParams::class}" } val extractedParams = - parsedParams.let { extractRequestObject(it.parameters as AuthenticationRequestParameters) ?: it } + (parsedParams.parameters as? AuthenticationRequestParameters)?.let { + extractRequestObject(it) + } ?: parsedParams .also { Napier.i("Parsed authentication request: $it") } extractedParams } @@ -119,7 +116,6 @@ class RequestParser( is SignatureRequestParameters -> SignatureRequestParametersFrom.JwsSigned(jws, params) - .also { Napier.d { "It did make a difference for JwsSigned" } } } } else null .also { Napier.w("parseRequestObjectJws: Signature not verified for $jws") }