diff options
author | Torsten Grote <t@grobox.de> | 2020-08-24 17:10:49 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2020-08-24 17:10:49 -0300 |
commit | 39dcd04750eef1581d0bdde394371ef9ca2808b9 (patch) | |
tree | a33a9c9f2683d911ff4fd2b691d91f15d117ce39 /wallet/src/main/java/net/taler/wallet/payment | |
parent | 35bc91761ad1f8336f331c6b04cff8bf4d9ae064 (diff) | |
download | taler-android-39dcd04750eef1581d0bdde394371ef9ca2808b9.tar.gz taler-android-39dcd04750eef1581d0bdde394371ef9ca2808b9.tar.bz2 taler-android-39dcd04750eef1581d0bdde394371ef9ca2808b9.zip |
Get rid of Jackson and only use multi-platform serialization
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/payment')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt | 25 | ||||
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt | 41 |
2 files changed, 26 insertions, 40 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt index 4924752..befcd83 100644 --- a/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt +++ b/wallet/src/main/java/net/taler/wallet/payment/PaymentManager.kt @@ -20,12 +20,10 @@ import android.util.Log import androidx.annotation.UiThread import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.fasterxml.jackson.databind.ObjectMapper -import com.fasterxml.jackson.module.kotlin.readValue import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import net.taler.lib.common.Amount import net.taler.common.ContractTerms +import net.taler.lib.common.Amount import net.taler.wallet.TAG import net.taler.wallet.backend.WalletBackendApi import net.taler.wallet.backend.WalletErrorInfo @@ -34,8 +32,6 @@ import net.taler.wallet.payment.PayStatus.InsufficientBalance import net.taler.wallet.payment.PreparePayResponse.AlreadyConfirmedResponse import net.taler.wallet.payment.PreparePayResponse.InsufficientBalanceResponse import net.taler.wallet.payment.PreparePayResponse.PaymentPossibleResponse -import org.json.JSONObject -import java.net.MalformedURLException val REGEX_PRODUCT_IMAGE = Regex("^data:image/(jpeg|png);base64,([A-Za-z0-9+/=]+)$") @@ -63,7 +59,6 @@ sealed class PayStatus { class PaymentManager( private val api: WalletBackendApi, private val scope: CoroutineScope, - private val mapper: ObjectMapper ) { private val mPayStatus = MutableLiveData<PayStatus>(PayStatus.None) @@ -76,7 +71,7 @@ class PaymentManager( fun preparePay(url: String) = scope.launch { mPayStatus.value = PayStatus.Loading mDetailsShown.value = false - api.request<PreparePayResponse>("preparePay", mapper) { + api.request("preparePay", PreparePayResponse.serializer()) { put("talerPayUri", url) }.onError { handleError("preparePay", it) @@ -93,20 +88,6 @@ class PaymentManager( } } - // TODO validate product images (or leave to wallet-core?) - private fun getContractTerms(json: JSONObject): ContractTerms { - val terms: ContractTerms = mapper.readValue(json.getString("contractTermsRaw")) - // validate product images - terms.products.forEach { product -> - product.image?.let { image -> - if (REGEX_PRODUCT_IMAGE.matchEntire(image) == null) { - throw MalformedURLException("Invalid image data URL for ${product.description}") - } - } - } - return terms - } - fun confirmPay(proposalId: String, currency: String) = scope.launch { api.request("confirmPay", ConfirmPayResult.serializer()) { put("proposalId", proposalId) @@ -128,7 +109,7 @@ class PaymentManager( internal fun abortProposal(proposalId: String) = scope.launch { Log.i(TAG, "aborting proposal") - api.request<String>("abortProposal", mapper) { + api.request<Unit>("abortProposal") { put("proposalId", proposalId) }.onError { Log.e(TAG, "received error response to abortProposal") diff --git a/wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt b/wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt index c490654..19007b0 100644 --- a/wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt +++ b/wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt @@ -16,42 +16,47 @@ package net.taler.wallet.payment -import com.fasterxml.jackson.annotation.JsonTypeInfo -import com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME -import com.fasterxml.jackson.annotation.JsonTypeName import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import net.taler.common.ContractTerms +import net.taler.lib.android.CustomClassDiscriminator import net.taler.lib.common.Amount import net.taler.wallet.transactions.TransactionError -@JsonTypeInfo(use = NAME, property = "status") -sealed class PreparePayResponse(open val proposalId: String) { - @JsonTypeName("payment-possible") +@Serializable +sealed class PreparePayResponse { + companion object : CustomClassDiscriminator { + override val discriminator: String = "status" + } + + @Serializable + @SerialName("payment-possible") data class PaymentPossibleResponse( - override val proposalId: String, + val proposalId: String, val amountRaw: Amount, val amountEffective: Amount, - val contractTerms: ContractTerms - ) : PreparePayResponse(proposalId) { + val contractTerms: ContractTerms, + ) : PreparePayResponse() { fun toPayStatusPrepared() = PayStatus.Prepared( contractTerms = contractTerms, proposalId = proposalId, amountRaw = amountRaw, - amountEffective = amountEffective + amountEffective = amountEffective, ) } - @JsonTypeName("insufficient-balance") + @Serializable + @SerialName("insufficient-balance") data class InsufficientBalanceResponse( - override val proposalId: String, + val proposalId: String, val amountRaw: Amount, - val contractTerms: ContractTerms - ) : PreparePayResponse(proposalId) + val contractTerms: ContractTerms, + ) : PreparePayResponse() - @JsonTypeName("already-confirmed") + @Serializable + @SerialName("already-confirmed") data class AlreadyConfirmedResponse( - override val proposalId: String, + val proposalId: String, /** * Did the payment succeed? */ @@ -62,8 +67,8 @@ sealed class PreparePayResponse(open val proposalId: String) { /** * Redirect URL for the fulfillment page, only given if paid==true. */ - val nextUrl: String? - ) : PreparePayResponse(proposalId) + val nextUrl: String?, + ) : PreparePayResponse() } @Serializable |