From 892214ec271cc74abfa153ffa74c0943eb4d41e3 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 20 Feb 2023 12:09:00 -0500 Subject: [PATCH] Pays zaps through LNURLs / lud06 fields --- .../amethyst/lnurl/LightningAddressResolver.kt | 15 ++++++++++++--- .../ui/screen/loggedIn/AccountViewModel.kt | 2 +- .../amethyst/ui/screen/loggedIn/ProfileScreen.kt | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/lnurl/LightningAddressResolver.kt b/app/src/main/java/com/vitorpamplona/amethyst/lnurl/LightningAddressResolver.kt index 7cc18d3da..8ac62041c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/lnurl/LightningAddressResolver.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/lnurl/LightningAddressResolver.kt @@ -1,5 +1,6 @@ package com.vitorpamplona.amethyst.lnurl +import androidx.compose.ui.text.toLowerCase import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import java.net.URLEncoder import kotlinx.coroutines.CoroutineScope @@ -20,11 +21,19 @@ class LightningAddressResolver { fun assembleUrl(lnaddress: String): String? { val parts = lnaddress.split("@") - if (parts.size != 2) { - return null + if (parts.size == 2) { + return "https://${parts[1]}/.well-known/lnurlp/${parts[0]}" } - return "https://${parts[1]}/.well-known/lnurlp/${parts[0]}" + if (lnaddress.toLowerCase().startsWith("lnurl")) { + return try { + String(Bech32.decodeBytes(lnaddress, false).second) + } catch (e: Exception) { + null + } + } + + return null } fun fetchLightningAddressJson(lnaddress: String, onSuccess: (String) -> Unit, onError: (String) -> Unit) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt index 38e0c7765..8a72785e8 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/AccountViewModel.kt @@ -25,7 +25,7 @@ class AccountViewModel(private val account: Account): ViewModel() { } fun zap(note: Note, amount: Long, message: String, context: Context, onError: (String) -> Unit) { - val lud16 = note.author?.info?.lud16?.trim() + val lud16 = note.author?.info?.lud16?.trim() ?: note.author?.info?.lud06?.trim() if (lud16.isNullOrBlank()) { onError("User does not have a lightning address setup to receive sats") diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt index 82dda4048..5c98c159f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ProfileScreen.kt @@ -385,7 +385,7 @@ private fun DrawAdditionalInfo(baseUser: User, account: Account) { var ZapExpanded by remember { mutableStateOf(false) } - val lud16 = user.info?.lud16?.trim() + val lud16 = user.info?.lud16?.trim() ?: user.info?.lud06?.trim() if (!lud16.isNullOrEmpty()) { Row(verticalAlignment = Alignment.CenterVertically) {