From cb2acbfefd494d5de79c1e0d914c862453921806 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Sun, 9 Oct 2016 15:20:45 +0200 Subject: [PATCH 1/5] add additional IAP price tiers --- .../controllers/top-level/payments/iap.js | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/website/server/controllers/top-level/payments/iap.js b/website/server/controllers/top-level/payments/iap.js index 39817c6db5..e7375d9954 100644 --- a/website/server/controllers/top-level/payments/iap.js +++ b/website/server/controllers/top-level/payments/iap.js @@ -54,12 +54,26 @@ api.iapAndroidVerify = { userId: user._id, }); - await payments.buyGems({ - user, - paymentMethod: 'IAP GooglePlay', - amount: 5.25, - headers: req.headers, - }); + switch (purchaseData.productId) { + case 'com.habitrpg.android.habitica.iap.4gems': + await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: 1, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + break; + + case 'com.habitrpg.android.habitica.iap.20gems': + case 'com.habitrpg.android.habitica.iap.21gems': + await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: 5.25, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + break; + case 'com.habitrpg.android.habitica.iap.42gems': + await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: 10.5, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + break; + case 'com.habitrpg.android.habitica.iap.84gems': + await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: 21, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + break; + default: + correctReceipt = false; + } + + if (!correctReceipt) throw new Error('INVALID_ITEM_PURCHASED'); res.respond(200, googleRes); }, @@ -118,9 +132,6 @@ api.iapiOSVerify = { case 'com.habitrpg.ios.Habitica.4gems': await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: 1, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop break; - case 'com.habitrpg.ios.Habitica.8gems': - await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: 2, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop - break; case 'com.habitrpg.ios.Habitica.20gems': case 'com.habitrpg.ios.Habitica.21gems': await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: 5.25, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop @@ -128,6 +139,9 @@ api.iapiOSVerify = { case 'com.habitrpg.ios.Habitica.42gems': await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: 10.5, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop break; + case 'com.habitrpg.ios.Habitica.84gems': + await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: 21, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + break; default: correctReceipt = false; } From 5f3b147d2a7e722d8fc4e2610a8bde3301973e07 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 10 Oct 2016 10:07:10 +0200 Subject: [PATCH 2/5] refactor IAP handling --- .../controllers/top-level/payments/iap.js | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/website/server/controllers/top-level/payments/iap.js b/website/server/controllers/top-level/payments/iap.js index e7375d9954..dbadebd5d5 100644 --- a/website/server/controllers/top-level/payments/iap.js +++ b/website/server/controllers/top-level/payments/iap.js @@ -54,26 +54,29 @@ api.iapAndroidVerify = { userId: user._id, }); + var amount = 0; + switch (purchaseData.productId) { case 'com.habitrpg.android.habitica.iap.4gems': - await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: 1, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + amount = 1; break; - case 'com.habitrpg.android.habitica.iap.20gems': case 'com.habitrpg.android.habitica.iap.21gems': - await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: 5.25, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + amount = 5.25; break; case 'com.habitrpg.android.habitica.iap.42gems': - await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: 10.5, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + amount = 10.5; break; case 'com.habitrpg.android.habitica.iap.84gems': - await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: 21, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + amount = 21; break; - default: - correctReceipt = false; } - if (!correctReceipt) throw new Error('INVALID_ITEM_PURCHASED'); + if (amount === 0) { + if (!correctReceipt) throw new Error('INVALID_ITEM_PURCHASED'); + } + + await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: amount, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop res.respond(200, googleRes); }, @@ -128,23 +131,27 @@ api.iapiOSVerify = { throw new Error('RECEIPT_ALREADY_USED'); } + var amount = 0; switch (purchaseData.productId) { case 'com.habitrpg.ios.Habitica.4gems': - await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: 1, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + amount = 1; break; case 'com.habitrpg.ios.Habitica.20gems': case 'com.habitrpg.ios.Habitica.21gems': - await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: 5.25, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + amount = 5.25 break; case 'com.habitrpg.ios.Habitica.42gems': - await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: 10.5, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + amount = 10.5; break; case 'com.habitrpg.ios.Habitica.84gems': - await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: 21, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + amount = 21; break; - default: - correctReceipt = false; } + if (amount === 0) { + correctReceipt = false; + break; + } + await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: amount, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop } if (!correctReceipt) throw new Error('INVALID_ITEM_PURCHASED'); From c84d6ba14148973cc4eb0c431e781beab67433b3 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 10 Oct 2016 14:27:51 +0200 Subject: [PATCH 3/5] fix linter errors --- .../server/controllers/top-level/payments/iap.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/website/server/controllers/top-level/payments/iap.js b/website/server/controllers/top-level/payments/iap.js index dbadebd5d5..f17d370b72 100644 --- a/website/server/controllers/top-level/payments/iap.js +++ b/website/server/controllers/top-level/payments/iap.js @@ -54,9 +54,9 @@ api.iapAndroidVerify = { userId: user._id, }); - var amount = 0; + let amount = 0; - switch (purchaseData.productId) { + switch (receiptObj.productId) { case 'com.habitrpg.android.habitica.iap.4gems': amount = 1; break; @@ -72,11 +72,9 @@ api.iapAndroidVerify = { break; } - if (amount === 0) { - if (!correctReceipt) throw new Error('INVALID_ITEM_PURCHASED'); - } + if (amount === 0) throw new Error('INVALID_ITEM_PURCHASED'); - await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount: amount, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop res.respond(200, googleRes); }, @@ -131,14 +129,14 @@ api.iapiOSVerify = { throw new Error('RECEIPT_ALREADY_USED'); } - var amount = 0; + let amount = 0; switch (purchaseData.productId) { case 'com.habitrpg.ios.Habitica.4gems': amount = 1; break; case 'com.habitrpg.ios.Habitica.20gems': case 'com.habitrpg.ios.Habitica.21gems': - amount = 5.25 + amount = 5.25; break; case 'com.habitrpg.ios.Habitica.42gems': amount = 10.5; @@ -151,7 +149,7 @@ api.iapiOSVerify = { correctReceipt = false; break; } - await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount: amount, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop } if (!correctReceipt) throw new Error('INVALID_ITEM_PURCHASED'); From c6e2b789826e77223ad5f7fed15e81f92946378c Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Tue, 11 Oct 2016 20:47:01 +0200 Subject: [PATCH 4/5] Make requested syntax changes --- .../controllers/top-level/payments/iap.js | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/website/server/controllers/top-level/payments/iap.js b/website/server/controllers/top-level/payments/iap.js index f17d370b72..1e69e1a462 100644 --- a/website/server/controllers/top-level/payments/iap.js +++ b/website/server/controllers/top-level/payments/iap.js @@ -54,7 +54,7 @@ api.iapAndroidVerify = { userId: user._id, }); - let amount = 0; + let amount; switch (receiptObj.productId) { case 'com.habitrpg.android.habitica.iap.4gems': @@ -72,9 +72,14 @@ api.iapAndroidVerify = { break; } - if (amount === 0) throw new Error('INVALID_ITEM_PURCHASED'); + if (amount) throw new Error('INVALID_ITEM_PURCHASED'); - await payments.buyGems({user, paymentMethod: 'IAP GooglePlay', amount, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + await payments.buyGems({ + user, + paymentMethod: 'IAP GooglePlay', + amount, + headers: req.headers + }); res.respond(200, googleRes); }, @@ -129,7 +134,7 @@ api.iapiOSVerify = { throw new Error('RECEIPT_ALREADY_USED'); } - let amount = 0; + let amount; switch (purchaseData.productId) { case 'com.habitrpg.ios.Habitica.4gems': amount = 1; @@ -145,11 +150,16 @@ api.iapiOSVerify = { amount = 21; break; } - if (amount === 0) { + if (amount) { correctReceipt = false; break; } - await payments.buyGems({user, paymentMethod: 'IAP AppleStore', amount, headers: req.headers}); // eslint-disable-line babel/no-await-in-loop + await payments.buyGems({ + user, + paymentMethod: 'IAP AppleStore', + amount, + headers: req.headers + }); // eslint-disable-line babel/no-await-in-loop } if (!correctReceipt) throw new Error('INVALID_ITEM_PURCHASED'); From 7568dd52e9f157849f2ecc50a0e35553b13d88f5 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Tue, 11 Oct 2016 20:49:46 +0200 Subject: [PATCH 5/5] Fix wrong if statements --- website/server/controllers/top-level/payments/iap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/server/controllers/top-level/payments/iap.js b/website/server/controllers/top-level/payments/iap.js index 1e69e1a462..50a3209e57 100644 --- a/website/server/controllers/top-level/payments/iap.js +++ b/website/server/controllers/top-level/payments/iap.js @@ -72,7 +72,7 @@ api.iapAndroidVerify = { break; } - if (amount) throw new Error('INVALID_ITEM_PURCHASED'); + if (!amount) throw new Error('INVALID_ITEM_PURCHASED'); await payments.buyGems({ user, @@ -150,7 +150,7 @@ api.iapiOSVerify = { amount = 21; break; } - if (amount) { + if (!amount) { correctReceipt = false; break; }