Feat: implement per operator settings cache
Fix: fix linter-found issues Chore: move findOperatorId to own middleware file Chore: delete old routes.js file and rename new-routes.js to routes.js Fix: PR fixes
This commit is contained in:
parent
85235eaa13
commit
558317e9f3
30 changed files with 232 additions and 860 deletions
|
|
@ -7,14 +7,7 @@ const compliance = require('../compliance')
|
|||
const complianceTriggers = require('../compliance-triggers')
|
||||
const configManager = require('../new-config-manager')
|
||||
const customers = require('../customers')
|
||||
|
||||
function httpError (msg, code) {
|
||||
const err = new Error(msg)
|
||||
err.name = 'HTTPError'
|
||||
err.code = code || 500
|
||||
|
||||
return err
|
||||
}
|
||||
const httpError = require('../route-helpers').httpError
|
||||
|
||||
function updateCustomer (req, res, next) {
|
||||
const id = req.params.id
|
||||
|
|
@ -54,10 +47,8 @@ function triggerSanctions (req, res, next) {
|
|||
customers.getById(id)
|
||||
.then(customer => {
|
||||
if (!customer) { throw httpError('Not Found', 404) }
|
||||
|
||||
return compliance.validationPatch(req.deviceId, true, customer)
|
||||
.then(patch => customers.update(id, patch))
|
||||
|
||||
})
|
||||
.then(customer => res.status(200).json({ customer }))
|
||||
.catch(next)
|
||||
|
|
@ -81,7 +72,7 @@ function triggerSuspend (req, res, next) {
|
|||
const days = triggerId === 'no-ff-camera' ? 1 : getSuspendDays(triggers)
|
||||
|
||||
const date = new Date()
|
||||
date.setDate(date.getDate() + days);
|
||||
date.setDate(date.getDate() + days)
|
||||
customers.update(id, { suspendedUntil: date })
|
||||
.then(customer => res.status(200).json({ customer }))
|
||||
.catch(next)
|
||||
|
|
@ -92,4 +83,4 @@ router.patch('/:id/sanctions', triggerSanctions)
|
|||
router.patch('/:id/block', triggerBlock)
|
||||
router.patch('/:id/suspend', triggerSuspend)
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
|
|
@ -1,10 +1,6 @@
|
|||
const express = require('express')
|
||||
const router = express.Router()
|
||||
|
||||
const logger = require('../logger')
|
||||
const newSettingsLoader = require('../new-settings-loader')
|
||||
const poller = require('../poller')
|
||||
const settingsCache = require('../middlewares/settingsCache')
|
||||
const state = require('../middlewares/state')
|
||||
|
||||
router.get('/pid', (req, res) => {
|
||||
|
|
@ -49,15 +45,4 @@ router.post('/restartServices', (req, res) => {
|
|||
res.sendStatus(200)
|
||||
})
|
||||
|
||||
router.post('/dbChange', (req, res, next) => {
|
||||
settingsCache.clearCache()
|
||||
return newSettingsLoader.loadLatest()
|
||||
.then(poller.reload)
|
||||
.then(() => logger.info('Config reloaded'))
|
||||
.catch(err => {
|
||||
logger.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
})
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
const express = require('express')
|
||||
const router = express.Router()
|
||||
const _ = require('lodash/fp')
|
||||
|
||||
const state = require('../middlewares/state')
|
||||
const logs = require('../logs')
|
||||
|
|
@ -32,4 +31,4 @@ function updateLogs (req, res, next) {
|
|||
router.get('/', getLastSeen)
|
||||
router.post('/', updateLogs)
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
const express = require('express')
|
||||
const router = express.Router()
|
||||
|
||||
const ca = require('../middlewares/ca')
|
||||
const pair = require('../middlewares/pair')
|
||||
const populateDeviceId = require('../middlewares/populateDeviceId')
|
||||
|
||||
router.post('/pair', populateDeviceId, pair)
|
||||
router.get('/ca', ca)
|
||||
|
||||
module.exports = router
|
||||
|
|
@ -7,6 +7,7 @@ const compliance = require('../compliance')
|
|||
const complianceTriggers = require('../compliance-triggers')
|
||||
const configManager = require('../new-config-manager')
|
||||
const customers = require('../customers')
|
||||
const httpError = require('../route-helpers').httpError
|
||||
const plugins = require('../plugins')
|
||||
const Tx = require('../tx')
|
||||
|
||||
|
|
@ -44,14 +45,6 @@ function addOrUpdateCustomer (req) {
|
|||
})
|
||||
}
|
||||
|
||||
function httpError (msg, code) {
|
||||
const err = new Error(msg)
|
||||
err.name = 'HTTPError'
|
||||
err.code = code || 500
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
function getCustomerWithPhoneCode (req, res, next) {
|
||||
const pi = plugins(req.settings, req.deviceId)
|
||||
const phone = req.body.phone
|
||||
|
|
@ -70,4 +63,4 @@ function getCustomerWithPhoneCode (req, res, next) {
|
|||
|
||||
router.post('/', getCustomerWithPhoneCode)
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
const express = require('express')
|
||||
const router = express.Router()
|
||||
const nmd = require('nano-markdown')
|
||||
const _ = require('lodash/fp')
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
const complianceTriggers = require('../compliance-triggers')
|
||||
const configManager = require('../new-config-manager')
|
||||
const plugins = require('../plugins')
|
||||
|
|
@ -13,17 +15,13 @@ function checkHasLightning (settings) {
|
|||
return configManager.getWalletSettings('BTC', settings.config).layer2 !== 'no-layer2'
|
||||
}
|
||||
|
||||
function createTerms (terms) {
|
||||
if (!terms.active || !terms.text) return null
|
||||
|
||||
return {
|
||||
active: terms.active,
|
||||
title: terms.title,
|
||||
text: nmd(terms.text),
|
||||
accept: terms.acceptButtonText,
|
||||
cancel: terms.cancelButtonText
|
||||
}
|
||||
}
|
||||
const createTerms = terms => (terms.active && terms.text) ? ({
|
||||
active: terms.active,
|
||||
title: terms.title,
|
||||
text: nmd(terms.text),
|
||||
accept: terms.acceptButtonText,
|
||||
cancel: terms.cancelButtonText
|
||||
}) : null
|
||||
|
||||
function poll (req, res, next) {
|
||||
const machineVersion = req.query.version
|
||||
|
|
@ -109,4 +107,4 @@ function poll (req, res, next) {
|
|||
|
||||
router.get('/', poll)
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
25
lib/routes/rootRoutes.js
Normal file
25
lib/routes/rootRoutes.js
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
const express = require('express')
|
||||
const router = express.Router()
|
||||
|
||||
const ca = require('../middlewares/ca')
|
||||
const httpError = require('../route-helpers').httpError
|
||||
const pairing = require('../pairing')
|
||||
const populateDeviceId = require('../middlewares/populateDeviceId')
|
||||
|
||||
function pair (req, res, next) {
|
||||
const token = req.query.token
|
||||
const deviceId = req.deviceId
|
||||
const model = req.query.model
|
||||
|
||||
return pairing.pair(token, deviceId, model)
|
||||
.then(isValid => {
|
||||
if (isValid) return res.json({ status: 'paired' })
|
||||
throw httpError('Pairing failed')
|
||||
})
|
||||
.catch(next)
|
||||
}
|
||||
|
||||
router.post('/pair', populateDeviceId, pair)
|
||||
router.get('/ca', ca)
|
||||
|
||||
module.exports = router
|
||||
|
|
@ -11,4 +11,4 @@ function stateChange (req, res, next) {
|
|||
|
||||
router.post('/', stateChange)
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
|
|
@ -1,20 +1,18 @@
|
|||
const express = require('express')
|
||||
const nmd = require('nano-markdown')
|
||||
|
||||
const router = express.Router()
|
||||
|
||||
const configManager = require('../new-config-manager')
|
||||
const plugins = require('../plugins')
|
||||
|
||||
function createTerms (terms) {
|
||||
if (!terms.active || !terms.text) return null
|
||||
|
||||
return {
|
||||
active: terms.active,
|
||||
title: terms.title,
|
||||
text: nmd(terms.text),
|
||||
accept: terms.acceptButtonText,
|
||||
cancel: terms.cancelButtonText
|
||||
}
|
||||
}
|
||||
const createTerms = terms => (terms.active && terms.text) ? ({
|
||||
active: terms.active,
|
||||
title: terms.title,
|
||||
text: nmd(terms.text),
|
||||
accept: terms.acceptButtonText,
|
||||
cancel: terms.cancelButtonText
|
||||
}) : null
|
||||
|
||||
function getTermsConditions (req, res, next) {
|
||||
const deviceId = req.deviceId
|
||||
|
|
@ -32,4 +30,4 @@ function getTermsConditions (req, res, next) {
|
|||
|
||||
router.get('/', getTermsConditions)
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
|
|
@ -3,19 +3,13 @@ const router = express.Router()
|
|||
const _ = require('lodash/fp')
|
||||
|
||||
const dbErrorCodes = require('../db-error-codes')
|
||||
const E = require('../error')
|
||||
const helpers = require('../route-helpers')
|
||||
const httpError = require('../route-helpers').httpError
|
||||
const logger = require('../logger')
|
||||
const plugins = require('../plugins')
|
||||
const Tx = require('../tx')
|
||||
|
||||
function httpError (msg, code) {
|
||||
const err = new Error(msg)
|
||||
err.name = 'HTTPError'
|
||||
err.code = code || 500
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
function postTx (req, res, next) {
|
||||
const pi = plugins(req.settings, req.deviceId)
|
||||
|
||||
|
|
@ -67,4 +61,4 @@ router.post('/', postTx)
|
|||
router.get('/:id', getTx)
|
||||
router.get('/', getPhoneTx)
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
49
lib/routes/verifyPromoCodeRoutes.js
Normal file
49
lib/routes/verifyPromoCodeRoutes.js
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
const express = require('express')
|
||||
const router = express.Router()
|
||||
const _ = require('lodash/fp')
|
||||
|
||||
const BN = require('../bn')
|
||||
const commissionMath = require('../commission-math')
|
||||
const configManager = require('../new-config-manager')
|
||||
const notifier = require('../notifier')
|
||||
const promoCodes = require('../promo-codes')
|
||||
|
||||
function respond (req, res, _body, _status) {
|
||||
const status = _status || 200
|
||||
const body = _body || {}
|
||||
const customer = _.getOr({ sanctions: true }, ['customer'], body)
|
||||
// sanctions can be null for new customers so we can't use falsy checks
|
||||
if (customer.sanctions === false) {
|
||||
notifier.notifyIfActive('compliance', 'sanctionsNotify', customer, req.body.phone)
|
||||
}
|
||||
return res.status(status).json(body)
|
||||
}
|
||||
|
||||
function verifyPromoCode (req, res, next) {
|
||||
promoCodes.getPromoCode(req.body.codeInput)
|
||||
.then(promoCode => {
|
||||
if (!promoCode) return next()
|
||||
|
||||
const transaction = req.body.tx
|
||||
const commissions = configManager.getCommissions(transaction.cryptoCode, req.deviceId, req.settings.config)
|
||||
const tickerRate = BN(transaction.rawTickerPrice)
|
||||
const discount = commissionMath.getDiscountRate(promoCode.discount, commissions[transaction.direction])
|
||||
const rates = {
|
||||
[transaction.cryptoCode]: {
|
||||
[transaction.direction]: (transaction.direction === 'cashIn')
|
||||
? tickerRate.mul(discount).round(5)
|
||||
: tickerRate.div(discount).round(5)
|
||||
}
|
||||
}
|
||||
|
||||
respond(req, res, {
|
||||
promoCode: promoCode,
|
||||
newRates: rates
|
||||
})
|
||||
})
|
||||
.catch(next)
|
||||
}
|
||||
|
||||
router.post('/', verifyPromoCode)
|
||||
|
||||
module.exports = router
|
||||
|
|
@ -12,4 +12,4 @@ function verifyTx (req, res, next) {
|
|||
|
||||
router.post('/', verifyTx)
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
|
|
@ -12,4 +12,4 @@ function verifyUser (req, res, next) {
|
|||
|
||||
router.post('/', verifyUser)
|
||||
|
||||
module.exports = router
|
||||
module.exports = router
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue