summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/payment
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2020-08-24 17:10:49 -0300
committerTorsten Grote <t@grobox.de>2020-08-24 17:10:49 -0300
commit39dcd04750eef1581d0bdde394371ef9ca2808b9 (patch)
treea33a9c9f2683d911ff4fd2b691d91f15d117ce39 /wallet/src/main/java/net/taler/wallet/payment
parent35bc91761ad1f8336f331c6b04cff8bf4d9ae064 (diff)
downloadtaler-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.kt25
-rw-r--r--wallet/src/main/java/net/taler/wallet/payment/PaymentResponses.kt41
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