diff options
author | Sebastian <sebasjm@gmail.com> | 2022-06-15 14:53:39 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-06-15 14:53:48 -0300 |
commit | 5b7bb5cf012fc41b2fbb6a41f6f858009c1ba092 (patch) | |
tree | d28fedbe31363f9c72fca31626d2104d4d375af6 /wallet/src/main/java/net/taler/wallet/withdraw/WithdrawManager.kt | |
parent | 627fff034a85c6076c8d1693af33c38fa4a99825 (diff) | |
download | taler-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.kt | 51 |
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, ) } + + |