feat: create db table and store operator id

This commit is contained in:
José Oliveira 2021-06-12 19:32:57 +01:00
parent 86e9204a28
commit 9b28c6a3f1
4 changed files with 77 additions and 38 deletions

View file

@ -1,17 +1,16 @@
const axios = require('axios') const axios = require('axios')
const _ = require('lodash/fp') const _ = require('lodash/fp')
const hkdf = require('futoin-hkdf')
const pify = require('pify') const pify = require('pify')
const fs = pify(require('fs')) const fs = pify(require('fs'))
const db = require('../db') const db = require('../db')
const mnemonicHelpers = require('../mnemonic-helpers')
const configManager = require('../new-config-manager') const configManager = require('../new-config-manager')
const complianceTriggers = require('../compliance-triggers') const complianceTriggers = require('../compliance-triggers')
const options = require('../options') const options = require('../options')
const logger = require('../logger') const logger = require('../logger')
const plugins = require('../plugins') const plugins = require('../plugins')
const { getOperatorId } = require('../operator')
const TIMEOUT = 10000 const TIMEOUT = 10000
const MAX_CONTENT_LENGTH = 2000 const MAX_CONTENT_LENGTH = 2000
@ -133,10 +132,10 @@ function sendRadar (data) {
function mapRecord (rates, settings) { function mapRecord (rates, settings) {
const timestamp = new Date().toISOString() const timestamp = new Date().toISOString()
return Promise.all([getMachines(rates, settings), fs.readFile(options.mnemonicPath, 'utf8')]) return Promise.all([getMachines(rates, settings), getOperatorId()])
.then(([machines, mnemonic]) => { .then(([machines, operatorId]) => {
return { return {
operatorId: computeOperatorId(mnemonicHelpers.toEntropyBuffer(mnemonic)), operatorId: operatorId,
operator: { operator: {
name: null, name: null,
phone: null, phone: null,
@ -157,7 +156,3 @@ function update (rates, settings) {
.then(sendRadar) .then(sendRadar)
.catch(err => logger.error(`Failure to update CoinATMRadar`, err)) .catch(err => logger.error(`Failure to update CoinATMRadar`, err))
} }
function computeOperatorId (masterSeed) {
return hkdf(masterSeed, 16, { salt: 'lamassu-server-salt', info: 'operator-id' }).toString('hex')
}

View file

@ -1,32 +1,13 @@
const pify = require('pify') const { getOperatorId } = require('../operator')
const fs = pify(require('fs'))
const hkdf = require('futoin-hkdf')
const state = require('./state')
const mnemonicHelpers = require('../mnemonic-helpers')
const options = require('../options')
const logger = require('../logger')
function computeOperatorId (masterSeed) {
return hkdf(masterSeed, 16, { salt: 'lamassu-server-salt', info: 'operator-id' }).toString('hex')
}
function getMnemonic () {
if (state.mnemonic) return Promise.resolve(state.mnemonic)
return fs.readFile(options.mnemonicPath, 'utf8').then(mnemonic => {
state.mnemonic = mnemonic
return mnemonic
})
}
function findOperatorId (req, res, next) { function findOperatorId (req, res, next) {
return getMnemonic().then(mnemonic => { return getOperatorId()
return computeOperatorId(mnemonicHelpers.toEntropyBuffer(mnemonic)) .then(({ id }) => {
}).then(id => {
res.locals.operatorId = id res.locals.operatorId = id
return next() return next()
}).catch(e => { })
logger.error('Error while computing operator id\n' + e) .catch(e => {
console.error('Error while computing operator id\n' + e)
next(e) next(e)
}) })
} }

8
lib/operator.js Normal file
View file

@ -0,0 +1,8 @@
const db = require('./db')
function getOperatorId () {
const sql = `SELECT id FROM operator_ids WHERE description = 'mnemonic'`
return db.oneOrNone(sql)
}
module.exports = { getOperatorId }

View file

@ -0,0 +1,55 @@
var db = require('./db')
const pify = require('pify')
const fs = pify(require('fs'))
const hkdf = require('futoin-hkdf')
const state = require('../lib/middlewares/state')
const mnemonicHelpers = require('../lib/mnemonic-helpers')
const options = require('../lib/options')
function computeOperatorId (masterSeed) {
return hkdf(masterSeed, 16, { salt: 'lamassu-server-salt', info: 'operator-id' }).toString('hex')
}
function getMnemonic () {
if (state.mnemonic) return Promise.resolve(state.mnemonic)
return fs.readFile(options.mnemonicPath, 'utf8').then(mnemonic => {
state.mnemonic = mnemonic
return mnemonic
})
}
function generateOperatorId () {
return getMnemonic().then(mnemonic => {
return computeOperatorId(mnemonicHelpers.toEntropyBuffer(mnemonic))
}).then(id => {
return id
}).catch(e => {
console.error('Error while computing operator id\n' + e)
throw e
})
}
exports.up = function (next) {
const sql =
[
`CREATE TABLE operator_ids (
id TEXT PRIMARY KEY,
description TEXT NOT NULL)`
]
generateOperatorId()
.then(operatorId => {
const sql2 = `INSERT INTO operator_ids (id, description) VALUES ('${operatorId}','mnemonic' )`
sql.push(sql2)
db.multi(sql, next)
.then(() => next())
})
.catch(e => {
db.multi(sql, next)
.then(() => next())
})
}
exports.down = function (next) {
next()
}