From 89b7c95c8a5924f5f06d7f235f25b553ba4de5d2 Mon Sep 17 00:00:00 2001 From: Josh Harvey Date: Wed, 7 Dec 2016 20:14:39 +0200 Subject: [PATCH] WIPP --- bin/apply-defaults.js | 44 ++++++++++++++++++++++++++++++++++++++++++ lib/settings-loader.js | 17 +++++++++------- 2 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 bin/apply-defaults.js diff --git a/bin/apply-defaults.js b/bin/apply-defaults.js new file mode 100644 index 00000000..be1d437e --- /dev/null +++ b/bin/apply-defaults.js @@ -0,0 +1,44 @@ +const _ = require('lodash/fp') + +// const db = require('../lib/db') +const settingsLoader = require('../lib/settings-loader') +const configManager = require('../lib/config-manager') +const schema = require('../lamassu-schema.json') +const newFields = [] + +settingsLoader.loadConfig() +.then(config => { + schema.groups.forEach(group => { + return group.fields.forEach(fieldCode => { + const field = schema.fields.find(r => r.code === fieldCode) + if (!field) throw new Error('No such field: ' + fieldCode) + if (_.isNil(field.default)) return + if (group.cryptoScope === 'specific' || group.machineScope === 'specific') return + + const existing = configManager.scopedValue('global', 'global', fieldCode, config) + if (existing) return + + return newFields.push({ + fieldLocator: { + fieldScope: { + crypto: 'global', + machine: 'global' + }, + code: fieldCode, + fieldType: field.fieldType, + fieldClass: field.fieldClass + }, + fieldValue: { + fieldType: field.fieldType, + value: field.default + } + }) + }) + }) + + return settingsLoader.save(config.concat(newFields)) +}) +.then(() => pp(newFields)) +.then(() => process.exit(0)) + +function pp (o) { console.log(require('util').inspect(o, {depth: null, colors: true})) } diff --git a/lib/settings-loader.js b/lib/settings-loader.js index e1670e30..a94069d0 100644 --- a/lib/settings-loader.js +++ b/lib/settings-loader.js @@ -5,14 +5,11 @@ const db = require('./db') let settingsCache function load () { - return Promise.all([ - db.one('select data from user_config where type=$1', 'config'), - loadAccounts() - ]) - .then(function ([data, accounts]) { + return Promise.all([loadConfig(), loadAccounts()]) + .then(function ([config, accounts]) { settingsCache = { - config: data.data.config, - accounts: accounts + config, + accounts } return settingsCache @@ -23,6 +20,11 @@ function load () { }) } +function loadConfig () { + return db.oneOrNone('select data from user_config where type=$1', 'config') + .then(row => row ? row.data.config : []) +} + function loadAccounts () { const toFields = fieldArr => R.fromPairs(R.map(r => [r.code, r.value], fieldArr)) const toPairs = r => [r.code, toFields(r.fields)] @@ -40,5 +42,6 @@ function settings () { module.exports = { settings, + loadConfig, load }