diff --git a/src/js/controllers/buyAmazon.js b/src/js/controllers/buyAmazon.js index 30b0401f4..53d70a63e 100644 --- a/src/js/controllers/buyAmazon.js +++ b/src/js/controllers/buyAmazon.js @@ -6,10 +6,10 @@ angular.module('copayApp.controllers').controller('buyAmazonController', window.ignoreMobilePause = true; var self = this; var fc; - var minimumAmount = 1; + var minimumAmount = 5; var stepAmount = 1; - var multiplierAmount = 2; - var maximumAmount = 10; + var multiplierAmount = 5; + var maximumAmount = 500; var otherWallets = function(network) { return lodash.filter(profileService.getWallets(network), function(w) { @@ -26,7 +26,7 @@ angular.module('copayApp.controllers').controller('buyAmazonController', }; this.init = function() { - $scope.fiat = minimumAmount * multiplierAmount; + $scope.fiat = minimumAmount; var network = configService.getSync().amazon.testnet ? 'testnet' : 'livenet'; amazonService.setCredentials(network); self.otherWallets = otherWallets(network); @@ -99,7 +99,7 @@ angular.module('copayApp.controllers').controller('buyAmazonController', if (plus && $scope.fiat < maximumAmount ) { stepAmount = stepAmount + 1; $scope.fiat = stepAmount * multiplierAmount; - } else if (!plus && $scope.fiat > minimumAmount * multiplierAmount) { + } else if (!plus && $scope.fiat > minimumAmount) { stepAmount = stepAmount - 1; $scope.fiat = stepAmount * multiplierAmount; } @@ -126,7 +126,7 @@ angular.module('copayApp.controllers').controller('buyAmazonController', amazonService.createBitPayInvoice(dataSrc, function(err, data) { if (err) { self.loading = null; - self.error = err; + self.error = bwsError.msg(err); return; } @@ -185,6 +185,7 @@ angular.module('copayApp.controllers').controller('buyAmazonController', self.errorInfo = gift; return; } + amazonService.setAmountByDay(dataSrc.price); self.giftCard = giftCard; $timeout(function() { $scope.$digest(); diff --git a/src/js/services/amazonService.js b/src/js/services/amazonService.js index fcedaa6c3..8c0e0229b 100644 --- a/src/js/services/amazonService.js +++ b/src/js/services/amazonService.js @@ -3,6 +3,7 @@ angular.module('copayApp.services').factory('amazonService', function($http, $log, lodash, moment, storageService, configService) { var root = {}; var credentials = {}; + var LIMIT = 500; root.setCredentials = function(network) { credentials.AMAZON_SANDBOX = network == 'testnet' ? true : false; @@ -28,6 +29,50 @@ angular.module('copayApp.services').factory('amazonService', function($http, $lo }; }; + var _checkLimit = function(amount, cb) { + var network = configService.getSync().amazon.testnet ? 'testnet' : 'livenet'; + var dateStamp = moment.utc().format('YYYY-MM-DD'); + storageService.getAmazonLimits(network, function(err, limits) { + if (err) $log.error(err); + + if (lodash.isEmpty(limits) && amount <= LIMIT) return cb(); + if (lodash.isEmpty(limits) || amount > LIMIT) return cb('EXCEEDED_DAYLY_LIMIT'); + + if (lodash.isString(limits)) { + limits = JSON.parse(limits); + } + + if (limits.date == dateStamp && (limits.amount + amount) > LIMIT) + return cb('EXCEEDED_DAYLY_LIMIT'); + + return cb(); + }); + }; + + root.setAmountByDay = function(amount) { + var network = configService.getSync().amazon.testnet ? 'testnet' : 'livenet'; + var dateStamp = moment.utc().format('YYYY-MM-DD'); + storageService.getAmazonLimits(network, function(err, limits) { + if (err) $log.error(err); + + if (lodash.isEmpty(limits)) limits = { date: dateStamp, amount: 0 }; + + if (lodash.isString(limits)) { + limits = JSON.parse(limits); + } + + if (limits.date == dateStamp) { + limits.amount = limits.amount + amount; + } else { + limits = { date: dateStamp, amount: amount }; + } + limits = JSON.stringify(limits); + storageService.setAmazonLimits(network, limits, function(err) { + if (err) $log.error(err); + }); + }); + }; + var _getSignatureKey = function() { var key = credentials.AMAZON_SECRET_KEY; @@ -116,12 +161,15 @@ angular.module('copayApp.services').factory('amazonService', function($http, $lo price: data.price, currency: data.currency }; - $http(_postBitPay('/invoices', data)).then(function(data) { - $log.info('BitPay Create Invoice: SUCCESS'); - return cb(null, data.data); - }, function(data) { - $log.error('BitPay Create Invoice: ERROR ' + data.data.error); - return cb(data.data.error); + _checkLimit(data.price, function(err) { + if (err) return cb(err); + $http(_postBitPay('/invoices', data)).then(function(data) { + $log.info('BitPay Create Invoice: SUCCESS'); + return cb(null, data.data); + }, function(data) { + $log.error('BitPay Create Invoice: ERROR ' + data.data.error); + return cb(data.data.error); + }); }); }; diff --git a/src/js/services/bwcError.js b/src/js/services/bwcError.js index 436dde91c..408504672 100644 --- a/src/js/services/bwcError.js +++ b/src/js/services/bwcError.js @@ -139,6 +139,9 @@ angular.module('copayApp.services') case 'PASSWORD_INCORRECT': body = gettextCatalog.getString('Wrong spending password'); break; + case 'EXCEEDED_DAYLY_LIMIT': + body = gettextCatalog.getString('Exceeded dayly limit of $500 per user'); + break; case 'ERROR': body = (err.message || err.error); break; diff --git a/src/js/services/storageService.js b/src/js/services/storageService.js index 2f67fd282..aeaab2e48 100644 --- a/src/js/services/storageService.js +++ b/src/js/services/storageService.js @@ -330,5 +330,17 @@ angular.module('copayApp.services') storage.remove('amazonGiftCards-' + network, cb); }; + root.setAmazonLimits = function(network, limits, cb) { + storage.set('amazonLimits-' + network, limits, cb); + }; + + root.getAmazonLimits = function(network, cb) { + storage.get('amazonLimits-' + network, cb); + }; + + root.removeAmazonLimits = function(network, cb) { + storage.remove('amazonLimits-' + network, cb); + }; + return root; });