From b0922f04b82cac78aa663a8059a2930578f670e4 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 14 Oct 2015 23:21:19 +0200 Subject: [PATCH 1/4] Handle new possible iOS in-app-purchases --- website/src/controllers/payments/iap.js | 26 ++++++++++++++++++++--- website/src/controllers/payments/index.js | 3 ++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/website/src/controllers/payments/iap.js b/website/src/controllers/payments/iap.js index 6065673287..42f9eadc55 100644 --- a/website/src/controllers/payments/iap.js +++ b/website/src/controllers/payments/iap.js @@ -101,9 +101,29 @@ exports.iosVerify = function(req, res, next) { if (iap.isValidated(appleRes)) { var purchaseDataList = iap.getPurchaseData(appleRes); if (purchaseDataList.length > 0) { - if (purchaseDataList[0].productId === 'com.habitrpg.ios.Habitica.20gems') { - //Correct receipt - payments.buyGems({user:user, paymentMethod:'IAP AppleStore'}); + var correctReceipt = true; + for (index in purchaseDataList) { + switch (purchaseDataList[index].productId) { + case 'com.habitrpg.ios.Habitica.20gems': + payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 5}); + break; + case 'com.habitrpg.ios.Habitica.4gems': + payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 1}); + break; + case 'com.habitrpg.ios.Habitica.8gems': + payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 2}); + break; + case 'com.habitrpg.ios.Habitica.21gems': + payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 5.25}); + break; + case 'com.habitrpg.ios.Habitica.42gems': + payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 10.5}); + break; + default: + correctReceipt = false; + } + } + if (correctReceipt) { var resObj = { ok: true, data: appleRes diff --git a/website/src/controllers/payments/index.js b/website/src/controllers/payments/index.js index b1b444006f..adc60e9e9a 100644 --- a/website/src/controllers/payments/index.js +++ b/website/src/controllers/payments/index.js @@ -137,7 +137,8 @@ exports.cancelSubscription = function(data, cb) { } exports.buyGems = function(data, cb) { - var amt = data.gift ? data.gift.gems.amount/4 : 5; + var amt = data.amount ? data.amount : 5; + amt = data.gift ? data.gift.gems.amount/4 : amt; (data.gift ? data.gift.member : data.user).balance += amt; data.user.purchased.txnCount++; if(isProduction) { From 319c294354659ec27ac984bfc3297232ba7bb403 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 15 Oct 2015 00:08:25 +0200 Subject: [PATCH 2/4] Fix global variable leak --- website/src/controllers/payments/iap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/controllers/payments/iap.js b/website/src/controllers/payments/iap.js index 42f9eadc55..67d55bf3fa 100644 --- a/website/src/controllers/payments/iap.js +++ b/website/src/controllers/payments/iap.js @@ -102,7 +102,7 @@ exports.iosVerify = function(req, res, next) { var purchaseDataList = iap.getPurchaseData(appleRes); if (purchaseDataList.length > 0) { var correctReceipt = true; - for (index in purchaseDataList) { + for (var index in purchaseDataList) { switch (purchaseDataList[index].productId) { case 'com.habitrpg.ios.Habitica.20gems': payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 5}); From 4835de55a86ebfb88f68e3a717fdefde3cb1ee08 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 15 Oct 2015 00:09:24 +0200 Subject: [PATCH 3/4] Adjust iap test --- test/api/inAppPurchases.coffee | 2 +- website/src/controllers/payments/iap.js | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/test/api/inAppPurchases.coffee b/test/api/inAppPurchases.coffee index b31e982e71..0256b4bd83 100644 --- a/test/api/inAppPurchases.coffee +++ b/test/api/inAppPurchases.coffee @@ -155,7 +155,7 @@ describe 'In-App Purchases', -> inApp.iosVerify(req, res, next) expect(paymentSpy).to.be.calledOnce - expect(paymentSpy).to.be.calledWith({user: res.locals.user, paymentMethod:'IAP AppleStore'}) + expect(paymentSpy).to.be.calledWith({user: res.locals.user, paymentMethod:'IAP AppleStore', amount: 5.25}) context 'error in setup', -> before -> diff --git a/website/src/controllers/payments/iap.js b/website/src/controllers/payments/iap.js index 67d55bf3fa..6da2a29606 100644 --- a/website/src/controllers/payments/iap.js +++ b/website/src/controllers/payments/iap.js @@ -104,15 +104,13 @@ exports.iosVerify = function(req, res, next) { var correctReceipt = true; for (var index in purchaseDataList) { switch (purchaseDataList[index].productId) { - case 'com.habitrpg.ios.Habitica.20gems': - payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 5}); - break; case 'com.habitrpg.ios.Habitica.4gems': payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 1}); break; case 'com.habitrpg.ios.Habitica.8gems': payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 2}); break; + case 'com.habitrpg.ios.Habitica.20gems': case 'com.habitrpg.ios.Habitica.21gems': payments.buyGems({user:user, paymentMethod:'IAP AppleStore', amount: 5.25}); break; From 3a427114276d275d3c5e323416e61f3dec318e87 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 19 Oct 2015 12:48:50 +0200 Subject: [PATCH 4/4] nicer style for default gem value --- website/src/controllers/payments/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/controllers/payments/index.js b/website/src/controllers/payments/index.js index adc60e9e9a..1f8935645d 100644 --- a/website/src/controllers/payments/index.js +++ b/website/src/controllers/payments/index.js @@ -137,7 +137,7 @@ exports.cancelSubscription = function(data, cb) { } exports.buyGems = function(data, cb) { - var amt = data.amount ? data.amount : 5; + var amt = data.amount || 5; amt = data.gift ? data.gift.gems.amount/4 : amt; (data.gift ? data.gift.member : data.user).balance += amt; data.user.purchased.txnCount++;