From 9aaf25fc20bee60d5a56248dd8cd3e45fd5fda56 Mon Sep 17 00:00:00 2001 From: Tung Wu Date: Mon, 24 Nov 2025 15:13:07 +0800 Subject: [PATCH 1/2] Ensure new authenticator type and kind won't break sdk --- .../com/oursky/authgear/AuthenticatorKind.kt | 37 +++++++++++++--- .../com/oursky/authgear/AuthenticatorType.kt | 43 ++++++++++++++++--- 2 files changed, 68 insertions(+), 12 deletions(-) diff --git a/sdk/src/main/java/com/oursky/authgear/AuthenticatorKind.kt b/sdk/src/main/java/com/oursky/authgear/AuthenticatorKind.kt index 43e5656c..818f5987 100644 --- a/sdk/src/main/java/com/oursky/authgear/AuthenticatorKind.kt +++ b/sdk/src/main/java/com/oursky/authgear/AuthenticatorKind.kt @@ -1,12 +1,39 @@ package com.oursky.authgear -import kotlinx.serialization.SerialName +import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.descriptors.PrimitiveKind -@Serializable +@Serializable(with = AuthenticatorKindSerializer::class) enum class AuthenticatorKind { - @SerialName("primary") PRIMARY, - @SerialName("secondary") - SECONDARY + SECONDARY, + UNKNOWN +} + +object AuthenticatorKindSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("AuthenticatorKind", PrimitiveKind.STRING) + + override fun deserialize(decoder: Decoder): AuthenticatorKind { + val value = decoder.decodeString() + return when (value) { + "primary" -> AuthenticatorKind.PRIMARY + "secondary" -> AuthenticatorKind.SECONDARY + else -> AuthenticatorKind.UNKNOWN + } + } + + override fun serialize(encoder: Encoder, value: AuthenticatorKind) { + val stringValue = when (value) { + AuthenticatorKind.PRIMARY -> "primary" + AuthenticatorKind.SECONDARY -> "secondary" + AuthenticatorKind.UNKNOWN -> "unknown" + } + encoder.encodeString(stringValue) + } } diff --git a/sdk/src/main/java/com/oursky/authgear/AuthenticatorType.kt b/sdk/src/main/java/com/oursky/authgear/AuthenticatorType.kt index acce0d27..dc4d56bd 100644 --- a/sdk/src/main/java/com/oursky/authgear/AuthenticatorType.kt +++ b/sdk/src/main/java/com/oursky/authgear/AuthenticatorType.kt @@ -1,16 +1,45 @@ package com.oursky.authgear -import kotlinx.serialization.SerialName +import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.descriptors.PrimitiveKind -@Serializable +@Serializable(with = AuthenticatorTypeSerializer::class) enum class AuthenticatorType { - @SerialName("password") PASSWORD, - @SerialName("oob_otp_email") OOB_OTP_EMAIL, - @SerialName("oob_otp_sms") OOB_OTP_SMS, - @SerialName("totp") - TOTP + TOTP, + UNKNOWN +} + +object AuthenticatorTypeSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("AuthenticatorType", PrimitiveKind.STRING) + + override fun deserialize(decoder: Decoder): AuthenticatorType { + val value = decoder.decodeString() + return when (value) { + "password" -> AuthenticatorType.PASSWORD + "oob_otp_email" -> AuthenticatorType.OOB_OTP_EMAIL + "oob_otp_sms" -> AuthenticatorType.OOB_OTP_SMS + "totp" -> AuthenticatorType.TOTP + else -> AuthenticatorType.UNKNOWN + } + } + + override fun serialize(encoder: Encoder, value: AuthenticatorType) { + val stringValue = when (value) { + AuthenticatorType.PASSWORD -> "password" + AuthenticatorType.OOB_OTP_EMAIL -> "oob_otp_email" + AuthenticatorType.OOB_OTP_SMS -> "oob_otp_sms" + AuthenticatorType.TOTP -> "totp" + AuthenticatorType.UNKNOWN -> "unknown" + } + encoder.encodeString(stringValue) + } } From 873391a284f9e0692d98aed2a46764f2534b4c62 Mon Sep 17 00:00:00 2001 From: Tung Wu Date: Mon, 24 Nov 2025 15:32:16 +0800 Subject: [PATCH 2/2] Support passkey authenticator type --- sdk/src/main/java/com/oursky/authgear/AuthenticatorType.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/src/main/java/com/oursky/authgear/AuthenticatorType.kt b/sdk/src/main/java/com/oursky/authgear/AuthenticatorType.kt index dc4d56bd..89eae413 100644 --- a/sdk/src/main/java/com/oursky/authgear/AuthenticatorType.kt +++ b/sdk/src/main/java/com/oursky/authgear/AuthenticatorType.kt @@ -14,6 +14,7 @@ enum class AuthenticatorType { OOB_OTP_EMAIL, OOB_OTP_SMS, TOTP, + PASSKEY, UNKNOWN } @@ -28,6 +29,7 @@ object AuthenticatorTypeSerializer : KSerializer { "oob_otp_email" -> AuthenticatorType.OOB_OTP_EMAIL "oob_otp_sms" -> AuthenticatorType.OOB_OTP_SMS "totp" -> AuthenticatorType.TOTP + "passkey" -> AuthenticatorType.PASSKEY else -> AuthenticatorType.UNKNOWN } } @@ -38,6 +40,7 @@ object AuthenticatorTypeSerializer : KSerializer { AuthenticatorType.OOB_OTP_EMAIL -> "oob_otp_email" AuthenticatorType.OOB_OTP_SMS -> "oob_otp_sms" AuthenticatorType.TOTP -> "totp" + AuthenticatorType.PASSKEY -> "passkey" AuthenticatorType.UNKNOWN -> "unknown" } encoder.encodeString(stringValue)