refactor: logic and routing folders on new-admin

This commit is contained in:
Sérgio Salgado 2021-01-22 15:36:40 +00:00 committed by Josh Harvey
parent 0c7c7ccf42
commit d9e3a9e61f
10 changed files with 94 additions and 87 deletions

View file

@ -11,14 +11,13 @@ const cookieParser = require('cookie-parser')
const { ApolloServer, AuthenticationError } = require('apollo-server-express')
const _ = require('lodash/fp')
const T = require('../time')
const { typeDefs, resolvers } = require('./graphql/schema')
const login = require('./modules/login')
const register = require('./routes/authentication')
const options = require('../options')
const login = require('./login')
const { typeDefs, resolvers } = require('./graphql/schema')
const devMode = require('minimist')(process.argv.slice(2)).dev
const NEVER = new Date(Date.now() + 100 * T.years)
const idPhotoCardBasedir = _.get('idPhotoCardDir', options)
const frontCameraBasedir = _.get('frontCameraDir', options)
@ -66,35 +65,7 @@ app.use(cors({ credentials: true, origin: devMode && 'https://localhost:3001' })
app.use('/id-card-photo', serveStatic(idPhotoCardBasedir, { index: false }))
app.use('/front-camera-photo', serveStatic(frontCameraBasedir, { index: false }))
app.get('/api/register', (req, res, next) => {
const otp = req.query.otp
const ua = req.headers['user-agent']
const ip = req.ip
if (!otp) return next()
return login.register(otp, ua, ip)
.then(r => {
if (r.expired) return res.status(401).send('OTP expired, generate new registration link')
// Maybe user is using old registration key, attempt to authenticate
if (!r.success) return next()
const cookieOpts = {
httpOnly: true,
secure: true,
domain: hostname,
sameSite: true,
expires: NEVER
}
const token = r.token
req.token = token
res.cookie('token', token, cookieOpts)
res.sendStatus(200)
})
})
app.use('/', register)
// Everything not on graphql or api/register is redirected to the front-end
app.get('*', (req, res) => res.sendFile(path.resolve(__dirname, '..', '..', 'public', 'index.html')))

View file

@ -7,7 +7,7 @@ const DataLoader = require('dataloader')
const machineLoader = require('../../machine-loader')
const customers = require('../../customers')
const { machineAction } = require('../machines')
const { machineAction } = require('../modules/machines')
const logs = require('../../logs')
const settingsLoader = require('../../new-settings-loader')
// const tokenManager = require('../../token-manager')
@ -19,14 +19,14 @@ const bills = require('../bills')
const anonymous = require('../../constants').anonymousCustomer
const serverVersion = require('../../../package.json').version
const transactions = require('../transactions')
const funding = require('../funding')
const forex = require('../../forex')
const supervisor = require('../supervisor')
const serverLogs = require('../server-logs')
const pairing = require('../pairing')
const plugins = require('../../plugins')
const transactions = require('../modules/transactions')
const funding = require('../modules/funding')
const forex = require('../../forex')
const supervisor = require('../modules/supervisor')
const serverLogs = require('../modules/server-logs')
const pairing = require('../modules/pairing')
const plugins = require('../../plugins')
const {
accounts: accountsConfig,
coins,

View file

@ -1,11 +1,11 @@
const _ = require('lodash/fp')
const BN = require('../bn')
const settingsLoader = require('../new-settings-loader')
const configManager = require('../new-config-manager')
const wallet = require('../wallet')
const ticker = require('../ticker')
const coinUtils = require('../coin-utils')
const logger = require('../logger')
const BN = require('../../bn')
const settingsLoader = require('../../new-settings-loader')
const configManager = require('../../new-config-manager')
const wallet = require('../../wallet')
const ticker = require('../../ticker')
const coinUtils = require('../../coin-utils')
const logger = require('../../logger')
function allScopes (cryptoScopes, machineScopes) {
const scopes = []
@ -70,23 +70,23 @@ function getSingleCoinFunding (settings, fiatCode, cryptoCode) {
}
// Promise.allSettled not running on current version of node
const reflect = p => p.then(value => ({value, status: "fulfilled" }), error => ({error: error.toString(), status: "rejected" }))
const reflect = p => p.then(value => ({ value, status: 'fulfilled' }), error => ({ error: error.toString(), status: 'rejected' }))
function getFunding () {
return settingsLoader.loadLatest().then(settings => {
const cryptoCodes = configManager.getAllCryptoCurrencies(settings.config)
const fiatCode = configManager.getGlobalLocale(settings.config).fiatCurrency
const pareCoins = c => _.includes(c.cryptoCode, cryptoCodes)
const cryptoCurrencies = coinUtils.cryptoCurrencies()
const cryptoDisplays = _.filter(pareCoins, cryptoCurrencies)
const cryptoCodes = configManager.getAllCryptoCurrencies(settings.config)
const fiatCode = configManager.getGlobalLocale(settings.config).fiatCurrency
const pareCoins = c => _.includes(c.cryptoCode, cryptoCodes)
const cryptoCurrencies = coinUtils.cryptoCurrencies()
const cryptoDisplays = _.filter(pareCoins, cryptoCurrencies)
const promises = cryptoDisplays.map(it => getSingleCoinFunding(settings, fiatCode, it.cryptoCode))
return Promise.all(promises.map(reflect))
.then((response) => {
const mapped = response.map(it => _.merge({ errorMsg: it.error }, it.value))
return _.toArray(_.merge(mapped, cryptoDisplays))
})
})
const promises = cryptoDisplays.map(it => getSingleCoinFunding(settings, fiatCode, it.cryptoCode))
return Promise.all(promises.map(reflect))
.then((response) => {
const mapped = response.map(it => _.merge({ errorMsg: it.error }, it.value))
return _.toArray(_.merge(mapped, cryptoDisplays))
})
})
}
module.exports = { getFunding }

View file

@ -1,6 +1,6 @@
const crypto = require('crypto')
const db = require('../db')
const db = require('../../db')
function generateOTP (name) {
const otp = crypto.randomBytes(32).toString('hex')

View file

@ -1,4 +1,4 @@
const machineLoader = require('../machine-loader')
const machineLoader = require('../../machine-loader')
const { UserInputError } = require('apollo-server-express')
function getMachine (machineId) {

View file

@ -4,9 +4,9 @@ const readFile = pify(fs.readFile)
const crypto = require('crypto')
const baseX = require('base-x')
const options = require('../options')
const db = require('../db')
const pairing = require('../pairing')
const options = require('../../options')
const db = require('../../db')
const pairing = require('../../pairing')
const ALPHA_BASE = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'
const bsAlpha = baseX(ALPHA_BASE)

View file

@ -1,7 +1,7 @@
const _ = require('lodash/fp')
const uuid = require('uuid')
const db = require('../db')
const db = require('../../db')
function getServerLogs (from = new Date(0).toISOString(), until = new Date().toISOString(), limit = null, offset = 0) {
const sql = `select id, log_level, timestamp, message from server_logs

View file

@ -1,5 +1,5 @@
const xmlrpc = require('xmlrpc')
const logger = require('../logger')
const logger = require('../../logger')
const { promisify } = require('util')
// TODO new-admin: add the following to supervisor config

View file

@ -1,11 +1,11 @@
const _ = require('lodash/fp')
const pgp = require('pg-promise')()
const db = require('../db')
const machineLoader = require('../machine-loader')
const tx = require('../tx')
const cashInTx = require('../cash-in/cash-in-tx')
const { REDEEMABLE_AGE } = require('../cash-out/cash-out-helper')
const db = require('../../db')
const machineLoader = require('../../machine-loader')
const tx = require('../../tx')
const cashInTx = require('../../cash-in/cash-in-tx')
const { REDEEMABLE_AGE } = require('../../cash-out/cash-out-helper')
const NUM_RESULTS = 1000
@ -64,16 +64,10 @@ function batch (from = new Date(0).toISOString(), until = new Date().toISOString
order by created desc limit $4 offset $5`
return Promise.all([
db.any(cashInSql, [
cashInTx.PENDING_INTERVAL,
from,
until,
limit,
offset,
id
]),
db.any(cashInSql, [cashInTx.PENDING_INTERVAL, from, until, limit, offset, id]),
db.any(cashOutSql, [REDEEMABLE_AGE, from, until, limit, offset, id])
]).then(packager)
])
.then(packager)
}
function getCustomerTransactionsBatch (ids) {
@ -116,10 +110,10 @@ function getCustomerTransactionsBatch (ids) {
db.any(cashInSql, [_.map(pgp.as.text, ids).join(','), cashInTx.PENDING_INTERVAL, NUM_RESULTS]),
db.any(cashOutSql, [_.map(pgp.as.text, ids).join(','), NUM_RESULTS, REDEEMABLE_AGE])
])
.then(packager).then(transactions => {
const transactionMap = _.groupBy('customerId', transactions)
return ids.map(id => transactionMap[id])
})
.then(packager).then(transactions => {
const transactionMap = _.groupBy('customerId', transactions)
return ids.map(id => transactionMap[id])
})
}
function single (txId) {

View file

@ -0,0 +1,42 @@
const express = require('express')
const router = express.Router()
const login = require('../modules/login')
const options = require('../../options')
const T = require('../../time')
const NEVER = new Date(Date.now() + 100 * T.years)
const hostname = options.hostname
const register = (req, res, next) => {
const otp = req.query.otp
const ua = req.headers['user-agent']
const ip = req.ip
if (!otp) return next()
return login.register(otp, ua, ip)
.then(r => {
if (r.expired) return res.status(401).send('OTP expired, generate new registration link')
// Maybe user is using old registration key, attempt to authenticate
if (!r.success) return next()
const cookieOpts = {
httpOnly: true,
secure: true,
domain: hostname,
sameSite: true,
expires: NEVER
}
const token = r.token
req.token = token
res.cookie('token', token, cookieOpts)
res.sendStatus(200)
})
}
router.get('/api/register', register)
module.exports = router