summaryrefslogtreecommitdiffhomepage
path: root/android/lib
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-08-21 08:53:00 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-08-21 08:53:00 +0200
commit1cdea8d276a0eb62452696e811b9f327fc472a83 (patch)
treeaa56d3c0861e32f4cbb5f03ffba5dddfd1b69bc7 /android/lib
parent5cd267d7fc9f629b9bf6f4e72e1460ab5f543912 (diff)
parent61f1660bdd956032b2b6c50f5e7ff0a89f458fac (diff)
downloadmullvadvpn-1cdea8d276a0eb62452696e811b9f327fc472a83.tar.xz
mullvadvpn-1cdea8d276a0eb62452696e811b9f327fc472a83.zip
Merge branch 'investigate-purchases-not-being-credited-droid-2086'
Diffstat (limited to 'android/lib')
-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()) }
}