Making sure we puny-encode data before ons lookup (#936)

* Making sure we puny-encode data before ons lookup

* PR feedback
pull/1710/head
ThomasSession 2 months ago committed by GitHub
parent 16a98b837e
commit 7a113a29ea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -18,8 +18,11 @@ import kotlinx.coroutines.withTimeout
import network.loki.messenger.R
import org.session.libsession.snode.SnodeAPI
import org.session.libsession.snode.utilities.await
import org.session.libsignal.utilities.Log
import org.session.libsignal.utilities.PublicKeyValidation
import org.thoughtcrime.securesms.ui.GetString
import org.thoughtcrime.securesms.ui.LoadingDialog
import java.net.IDN
@HiltViewModel
internal class NewMessageViewModel @Inject constructor(
@ -44,7 +47,21 @@ internal class NewMessageViewModel @Inject constructor(
}
override fun onContinue() {
val idOrONS = state.value.newMessageIdOrOns.trim()
val trimmed = state.value.newMessageIdOrOns.trim()
// Check if all characters are ASCII (code <= 127).
val idOrONS = if (trimmed.all { it.code <= 127 }) {
// Already ASCII (or punycodeready); no conversion needed.
trimmed
} else {
try {
// For non-ASCII input (e.g. with emojis), attempt to puny-encode
IDN.toASCII(trimmed, IDN.ALLOW_UNASSIGNED)
} catch (e: IllegalArgumentException) {
// if the above failed, resort to the original trimmed string
Log.w("", "IDN.toASCII failed. Returning: $trimmed")
trimmed
}
}
if (PublicKeyValidation.isValid(idOrONS, isPrefixRequired = false)) {
onUnvalidatedPublicKey(publicKey = idOrONS)

Loading…
Cancel
Save