From 89eb1cae70a7057f964eaa0d51f15224af4c3a30 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 27 Oct 2022 12:00:47 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../saltPay/SaltPayActivationManager.kt | 18 ++++++--- .../saltPay/message/SaltPayModuleMessage.kt | 4 +- .../redux/OnboardingSaltPayMiddleware.kt | 5 --- .../network/api/paymentology/Responses.kt | 40 +++++++++++++------ 4 files changed, 42 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt index e103ad4391..b9f23d306c 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt @@ -17,6 +17,7 @@ import com.tangem.network.api.paymentology.RegisterKYCRequest import com.tangem.network.api.paymentology.RegisterWalletRequest import com.tangem.network.api.paymentology.RegisterWalletResponse import com.tangem.network.api.paymentology.RegistrationResponse +import com.tangem.network.api.paymentology.tryExtractError import com.tangem.operations.attestation.AttestWalletKeyResponse import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.domain.getFirstToken @@ -61,13 +62,15 @@ class SaltPayActivationManager( } suspend fun checkRegistration(): Result { - val registrationResponse = paymentologyService.checkRegistration(cardId, cardPublicKey).successOr { return it } + val response: RegistrationResponse = paymentologyService.checkRegistration(cardId, cardPublicKey) + .successOr { return it } + .tryExtractError() + .successOr { return it } return try { - if (!registrationResponse.success || registrationResponse.results.isEmpty()) { - throw SaltPayActivationError.EmptyResponse(registrationResponse.error) - } - Result.Success(registrationResponse.results[0]) + if (response.results.isEmpty()) throw SaltPayActivationError.EmptyResponse + + Result.Success(response.results[0]) } catch (ex: SaltPayActivationError) { Result.Failure(ex) } @@ -75,6 +78,8 @@ class SaltPayActivationManager( suspend fun requestAttestationChallenge(): Result { return paymentologyService.requestAttestationChallenge(cardId, cardPublicKey) + .successOr { return it } + .tryExtractError() } suspend fun sendTransactions( @@ -97,8 +102,9 @@ class SaltPayActivationManager( cardSignature = attestResponse.cardSignature ?: byteArrayOf(), pin = pinCode, ) - return paymentologyService.registerWallet(request) + .successOr { return it } + .tryExtractError() } suspend fun getAmountToClaim(): Result { diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/message/SaltPayModuleMessage.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/message/SaltPayModuleMessage.kt index cc018b17e2..6f2a5de7ad 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/message/SaltPayModuleMessage.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/message/SaltPayModuleMessage.kt @@ -37,8 +37,8 @@ sealed class SaltPayActivationError( object NeedPin : SaltPayActivationError(3) object NoGas : SaltPayActivationError(5) // - class EmptyResponse(message: String?) : SaltPayActivationError(6, message) - class CardNotFound(message: String?) : SaltPayActivationError(8, message) + object EmptyResponse : SaltPayActivationError(6) + object CardNotFound : SaltPayActivationError(8) class CardDisabled(message: String?) : SaltPayActivationError(9, message) class CardNotPassed(message: String?) : SaltPayActivationError(10, message) object EmptyDynamicAttestResponse : SaltPayActivationError(11) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt index 8e9c0e2834..b969f87719 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayMiddleware.kt @@ -99,11 +99,6 @@ private fun handleOnboardingSaltPayAction(anyAction: Action, appState: () -> App return@launch } - if (!attestationResponse.success) { - onError(SaltPayActivationError.CardNotFound(attestationResponse.error)) - return@launch - } - val registrationResponse = tangemSdkManager.runTaskAsync( runnable = saltPayManager.makeRegistrationTask(attestationResponse.challenge!!), cardId = saltPayManager.cardId, diff --git a/network/src/main/java/com/tangem/network/api/paymentology/Responses.kt b/network/src/main/java/com/tangem/network/api/paymentology/Responses.kt index 260c9e5c9d..b60324b42d 100644 --- a/network/src/main/java/com/tangem/network/api/paymentology/Responses.kt +++ b/network/src/main/java/com/tangem/network/api/paymentology/Responses.kt @@ -2,16 +2,32 @@ package com.tangem.network.api.paymentology import com.squareup.moshi.Json import com.tangem.common.extensions.calculateHashCode +import com.tangem.common.services.Result /** [REDACTED_AUTHOR] */ +interface ResponseError { + val success: Boolean + val error: String? + val errorCode: Int? + + fun makeErrorMessage(): String { + return error ?: "unknown error" + } +} + +inline fun ResponseError.tryExtractError(): Result = when (success) { + true -> Result.Success(this as T) + else -> Result.Failure(Throwable(makeErrorMessage())) +} + data class RegistrationResponse( val results: List = listOf(), - val success: Boolean, - val error: String?, - val errorCode: Int?, -) { + override val success: Boolean, + override val error: String?, + override val errorCode: Int?, +) : ResponseError { data class Item( @Json(name = "CID") @@ -47,10 +63,10 @@ enum class KYCStatus { data class AttestationResponse( val challenge: ByteArray?, - val success: Boolean, - val error: String?, - val errorCode: Int?, -) { + override val success: Boolean, + override val error: String?, + override val errorCode: Int?, +) : ResponseError { override fun equals(other: Any?): Boolean { if (this === other) return true @@ -75,7 +91,7 @@ data class AttestationResponse( } data class RegisterWalletResponse( - val success: Boolean, - val error: String?, - val errorCode: Int?, -) \ No newline at end of file + override val success: Boolean, + override val error: String?, + override val errorCode: Int?, +) : ResponseError \ No newline at end of file