summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-06-15 14:53:39 -0300
committerSebastian <sebasjm@gmail.com>2022-06-15 14:53:48 -0300
commit5b7bb5cf012fc41b2fbb6a41f6f858009c1ba092 (patch)
treed28fedbe31363f9c72fca31626d2104d4d375af6 /wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
parent627fff034a85c6076c8d1693af33c38fa4a99825 (diff)
downloadtaler-android-5b7bb5cf012fc41b2fbb6a41f6f858009c1ba092.tar.gz
taler-android-5b7bb5cf012fc41b2fbb6a41f6f858009c1ba092.tar.bz2
taler-android-5b7bb5cf012fc41b2fbb6a41f6f858009c1ba092.zip
accept decimal and bitcoin exchanges
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt')
-rw-r--r--wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt51
1 files changed, 46 insertions, 5 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
index d96f421..ca6ba17 100644
--- a/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt
@@ -16,6 +16,7 @@
package net.taler.wallet.withdraw
+import Bech32Data
import android.net.Uri
import android.util.Log
import androidx.annotation.UiThread
@@ -25,6 +26,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.serialization.Serializable
import net.taler.common.Amount
+import net.taler.common.CyptoUtils
import net.taler.common.Event
import net.taler.common.toEvent
import net.taler.wallet.TAG
@@ -33,6 +35,11 @@ import net.taler.wallet.backend.WalletBackendApi
import net.taler.wallet.exchanges.ExchangeFees
import net.taler.wallet.exchanges.ExchangeItem
import net.taler.wallet.withdraw.WithdrawStatus.ReceivedDetails
+import toBech32Data
+import kotlin.experimental.and
+import kotlin.experimental.or
+import kotlin.math.floor
+import kotlin.reflect.KProperty
sealed class WithdrawStatus {
data class Loading(val talerWithdrawUri: String? = null) : WithdrawStatus()
@@ -57,14 +64,30 @@ sealed class WithdrawStatus {
object Withdrawing : WithdrawStatus()
data class Success(val currency: String) : WithdrawStatus()
- data class ManualTransferRequired(
+ sealed class ManualTransferRequired: WithdrawStatus() {
+ abstract val uri: Uri
+ abstract val transactionId: String?
+ }
+
+ data class ManualTransferRequiredIBAN(
val exchangeBaseUrl: String,
- val uri: Uri,
+ override val uri: Uri,
val iban: String,
val subject: String,
val amountRaw: Amount,
- val transactionId: String?,
- ) : WithdrawStatus()
+ override val transactionId: String?,
+ ) : ManualTransferRequired() {
+ }
+
+ data class ManualTransferRequiredBitcoin(
+ val exchangeBaseUrl: String,
+ override val uri: Uri,
+ val account: String,
+ val segwitAddrs: List<String>,
+ val subject: String,
+ val amountRaw: Amount,
+ override val transactionId: String?,
+ ) : ManualTransferRequired()
data class Error(val message: String?) : WithdrawStatus()
}
@@ -264,6 +287,7 @@ class WithdrawManager(
}
+
fun createManualTransferRequired(
amount: Amount,
exchangeBaseUrl: String,
@@ -271,7 +295,22 @@ fun createManualTransferRequired(
transactionId: String? = null,
): WithdrawStatus.ManualTransferRequired {
val uri = Uri.parse(uriStr)
- return WithdrawStatus.ManualTransferRequired(
+ if ("bitcoin".equals(uri.authority, true)) {
+ val msg = uri.getQueryParameter("message")
+ val reg = "\\b([A-Z0-9]{52})\\b".toRegex().find(msg.orEmpty())
+ val reserve = reg?.value ?: uri.getQueryParameter("subject")!!
+ val segwitAddrs = Bech32.generateFakeSegwitAddress(reserve, uri.pathSegments.first())
+ return WithdrawStatus.ManualTransferRequiredBitcoin(
+ exchangeBaseUrl = exchangeBaseUrl,
+ uri = uri,
+ account = uri.lastPathSegment!!,
+ segwitAddrs = segwitAddrs,
+ subject = reserve,
+ amountRaw = amount,
+ transactionId = transactionId,
+ )
+ }
+ return WithdrawStatus.ManualTransferRequiredIBAN(
exchangeBaseUrl = exchangeBaseUrl,
uri = uri,
iban = uri.lastPathSegment!!,
@@ -280,3 +319,5 @@ fun createManualTransferRequired(
transactionId = transactionId,
)
}
+
+