lamassu-server/migrations/1623413776161-create-operator-ids.js
2022-04-19 22:47:36 +01:00

49 lines
1.5 KiB
JavaScript

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')
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(process.env.MNEMONIC_PATH, 'utf8').then(mnemonic => {
state.mnemonic = mnemonic
return mnemonic
})
}
function generateOperatorId () {
return getMnemonic().then(mnemonic => {
return computeOperatorId(mnemonicHelpers.toEntropyBuffer(mnemonic))
}).catch(e => {
console.error('Error while computing operator id\n' + e)
throw e
})
}
exports.up = function (next) {
return generateOperatorId()
.then(operatorId => {
const sql = [
`CREATE TABLE operator_ids (
id serial PRIMARY KEY,
operator_id TEXT NOT NULL,
service TEXT NOT NULL
)`,
`INSERT INTO operator_ids (operator_id, service) VALUES ('${operatorId}','middleware')`,
`INSERT INTO operator_ids (operator_id, service) VALUES ('${operatorId}','coinatmradar')`,
`INSERT INTO operator_ids (operator_id, service) VALUES ('${operatorId}','authentication')`
]
db.multi(sql, next)
})
}
exports.down = function (next) {
next()
}