summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
Diffstat (limited to 'android')
-rw-r--r--android/lib/billing/src/main/kotlin/net/mullvad/mullvadvpn/lib/billing/BillingPaymentRepository.kt35
1 files changed, 27 insertions, 8 deletions
diff --git a/android/lib/billing/src/main/kotlin/net/mullvad/mullvadvpn/lib/billing/BillingPaymentRepository.kt b/android/lib/billing/src/main/kotlin/net/mullvad/mullvadvpn/lib/billing/BillingPaymentRepository.kt
index e7ab084232..756aad02aa 100644
--- a/android/lib/billing/src/main/kotlin/net/mullvad/mullvadvpn/lib/billing/BillingPaymentRepository.kt
+++ b/android/lib/billing/src/main/kotlin/net/mullvad/mullvadvpn/lib/billing/BillingPaymentRepository.kt
@@ -25,6 +25,7 @@ import net.mullvad.mullvadvpn.lib.billing.model.PurchaseEvent
import net.mullvad.mullvadvpn.lib.model.PlayPurchase
import net.mullvad.mullvadvpn.lib.model.PlayPurchaseInitError
import net.mullvad.mullvadvpn.lib.model.PlayPurchasePaymentToken
+import net.mullvad.mullvadvpn.lib.model.PlayPurchaseVerifyError
import net.mullvad.mullvadvpn.lib.payment.PaymentRepository
import net.mullvad.mullvadvpn.lib.payment.ProductIds
import net.mullvad.mullvadvpn.lib.payment.model.PaymentAvailability
@@ -164,14 +165,32 @@ class BillingPaymentRepository(
}
}
- private suspend fun verifyPurchase(purchase: Purchase) =
- playPurchaseRepository
- .verifyPlayPurchase(
- PlayPurchase(
- productId = purchase.products.first(),
- purchaseToken = PlayPurchasePaymentToken(purchase.purchaseToken),
+ private suspend fun verifyPurchase(
+ purchase: Purchase
+ ): Either<PlayPurchaseVerifyError, ProductId> =
+ either {
+ ensure(purchase.products.isNotEmpty()) {
+ Logger.e("Purchase has no products")
+ PlayPurchaseVerifyError.OtherError
+ }
+ ensure(purchase.purchaseToken.isNotEmpty()) {
+ Logger.e("Purchase has no purchase token")
+ PlayPurchaseVerifyError.OtherError
+ }
+ playPurchaseRepository
+ .verifyPlayPurchase(
+ PlayPurchase(
+ productId = purchase.products.first(),
+ purchaseToken = PlayPurchasePaymentToken(purchase.purchaseToken),
+ )
+ )
+ .also { Logger.d("Purchase verification result $it") }
+ .bind()
+ }
+ .onLeft {
+ Logger.e(
+ "Failed to verify purchase token ending with ${purchase.purchaseToken.takeLast(2)}"
)
- )
- .also { Logger.d("Purchase verification result $it") }
+ }
.map { ProductId(purchase.products.first()) }
}