From 6986ab5a1c11eeb288d1d98e5e74ae595dcf57e6 Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 7 Mar 2025 15:44:26 +0800 Subject: [PATCH 1/2] feat: improve lpa parsing compatibility --- .../java/im/angry/openeuicc/util/ActivationCode.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/util/ActivationCode.kt b/app-common/src/main/java/im/angry/openeuicc/util/ActivationCode.kt index fd8156b..ec59d36 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/ActivationCode.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/ActivationCode.kt @@ -8,13 +8,12 @@ data class ActivationCode( ) { companion object { fun fromString(input: String): ActivationCode { - val components = input.removePrefix("LPA:").split('$') - .map(String::trim).map { it.ifBlank { null } } - if (components.size < 2 || components[0] != "1" || components[1] == null) { - throw IllegalStateException("Invalid activation code format") - } + check(input.startsWith("LPA:", ignoreCase = true)) { "Invalid activation code format" } + val components = input.drop(4).split('$').map { it.trim().ifEmpty { null } } + check(components.size >= 2) { "Invalid activation code format" } + check(components[0] == "1") { "Invalid activation code version" } return ActivationCode( - components[1]!!, + checkNotNull(components[1]) { "Invalid SM-DP+ address" }, components.getOrNull(2), components.getOrNull(3), components.getOrNull(4) == "1", From a9479d910645b29799641f4afba949befa4cf9b0 Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 7 Mar 2025 15:44:26 +0800 Subject: [PATCH 2/2] feat: improve lpa parsing compatibility --- .../java/im/angry/openeuicc/util/ActivationCode.kt | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/util/ActivationCode.kt b/app-common/src/main/java/im/angry/openeuicc/util/ActivationCode.kt index fd8156b..fbecfae 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/ActivationCode.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/ActivationCode.kt @@ -7,14 +7,13 @@ data class ActivationCode( val confirmationCodeRequired: Boolean = false, ) { companion object { - fun fromString(input: String): ActivationCode { - val components = input.removePrefix("LPA:").split('$') - .map(String::trim).map { it.ifBlank { null } } - if (components.size < 2 || components[0] != "1" || components[1] == null) { - throw IllegalStateException("Invalid activation code format") - } + fun fromString(token: String): ActivationCode { + val input = if (token.startsWith("LPA:", true)) token.drop(4) else token + val components = input.split('$').map { it.trim().ifEmpty { null } } + check(components.size >= 2) { "Invalid activation code format" } + check(components[0] == "1") { "Invalid activation code version" } return ActivationCode( - components[1]!!, + checkNotNull(components[1]) { "Invalid SM-DP+ address" }, components.getOrNull(2), components.getOrNull(3), components.getOrNull(4) == "1",