diff --git a/bin/ssu b/bin/ssu index 0d80154c..81707303 100755 --- a/bin/ssu +++ b/bin/ssu @@ -199,43 +199,65 @@ function crypto () { }) } +function connect () { + var psqlUrl + try { + psqlUrl = process.env.DATABASE_URL || JSON.parse(fs.readFileSync('/etc/lamassu.json')).postgresql + } catch (ex) { + psqlUrl = 'psql://lamassu:lamassu@localhost/lamassu' + } + return pgp(psqlUrl) +} + +function loadConfig (db) { + return db.one('select data from user_config where type=$1', 'exchanges') + .then(function (data) { + return data.data + }) +} + +function updateConfig (db, config) { + db.none('update user_config set data=$1 where type=$2', [config, 'exchanges']) + db.none('notify "config_update"') +} + +function modifyConfig (config, plugin, keys, result) { + keys.forEach(function (key) { + var value = result[key] + config.exchanges.plugins.settings[plugin] = config.exchanges.plugins.settings[plugin] || {} + config.exchanges.plugins.settings[plugin][key] = value + }) + return config +} + function configure () { var plugin = argv[1] - var key = argv[2] + var keys = argv.slice(2) - if (!plugin || !key) { - console.log('\nssu config ') + if (!plugin || keys.length === 0) { + console.log('\nssu config [ ...]') console.log('Configure a plugin setting.') process.exit(1) } - inquirer.prompt([{ - type: 'password', - name: 'value', - message: 'Enter value for ' + key + ': ', - validate: function (val) { - return !val || val.length === 0 - ? 'Please enter a value for ' + key - : true + var questions = keys.map(function (key) { + return { + type: 'input', + name: key, + message: 'Enter value for ' + key + ':', + validate: function (val) { + return !val || val.length === 0 + ? 'Please enter a value for ' + key + : true + } } - }]).then(function (result) { - var value = result.value - - var psqlUrl - try { - psqlUrl = process.env.DATABASE_URL || JSON.parse(fs.readFileSync('/etc/lamassu.json')).postgresql - } catch (ex) { - psqlUrl = 'psql://lamassu:lamassu@localhost/lamassu' - } - var db = pgp(psqlUrl) - - return db.one('select data from user_config where type=$1', 'exchanges') - .then(function (data) { - var config = data.data - config.exchanges.plugins.settings[plugin] = config.exchanges.plugins.settings[plugin] || {} - config.exchanges.plugins.settings[plugin][key] = value - db.none('update user_config set data=$1 where type=$2', [config, 'exchanges']) - db.none('notify "config_update"') + }) + inquirer.prompt(questions).then(function (result) { + var db = connect() + return loadConfig(db) + .then(function (config) { + var _config = modifyConfig(config, plugin, keys, result) + return updateConfig(db, _config) }) .then(function () { console.log('success') diff --git a/lib/config.js b/lib/config.js new file mode 100644 index 00000000..a5ad2002 --- /dev/null +++ b/lib/config.js @@ -0,0 +1,24 @@ +require('es6-promise').polyfill() +var fs = require('fs') +var pgp = require('pg-promise')() + +function connect () { + var psqlUrl + try { + psqlUrl = process.env.DATABASE_URL || JSON.parse(fs.readFileSync('/etc/lamassu.json')).postgresql + } catch (ex) { + psqlUrl = 'psql://lamassu:lamassu@localhost/lamassu' + } + return pgp(psqlUrl) +} + +function loadConfig () { + var db = connect() + return db.one('select data from user_config where type=$1', 'exchanges') + .then(function (data) { + pgp.end() + return data.data + }) +} + +exports.loadConfig = loadConfig diff --git a/lib/email.js b/lib/email.js index 2f7c2144..a4b683e9 100644 --- a/lib/email.js +++ b/lib/email.js @@ -1,4 +1,5 @@ var SMTPConnection = require('smtp-connection') +var Config = require('./config') /* @@ -17,24 +18,31 @@ var options = { } function send (from, to, subject, body, cb) { - var connection = new SMTPConnection(options) - connection.connect(function () { - connection.login({user: 'josh@lamassu.is', pass: 'HPtXGp}9baafiqns%6YFH'}, function (err) { - if (err) return console.error(err) - var envelope = { - from: from, - to: to - } - var message = 'Subject: ' + subject + '\n\n' + body - connection.send(envelope, message, function (err, info) { - connection.quit() - cb(err, info) + Config.loadConfig() + .then(function (config) { + var _config = config.exchanges.plugins.settings.email + var user = _config.user + var pass = _config.pass + + var connection = new SMTPConnection(options) + connection.connect(function () { + connection.login({user: user, pass: pass}, function (err) { + if (err) return console.error(err) + var envelope = { + from: from, + to: to + } + var message = 'Subject: ' + subject + '\n\n' + body + connection.send(envelope, message, function (err, info) { + connection.quit() + cb(err, info) + }) }) }) }) } -send('josh@lamassu.is', 'joshmh@gmail.com', 'Another test', 'Screen is stale.\n\nTest3', function (err, info) { +send('josh@lamassu.is', 'joshmh@gmail.com', 'Another test', 'Screen is stale.\n\nTest4', function (err, info) { console.log(err) console.log(info) }) diff --git a/lib/sms.js b/lib/sms.js index 2b0dbce7..18f5d229 100644 --- a/lib/sms.js +++ b/lib/sms.js @@ -1,12 +1,22 @@ -var accountSid = 'AC5b08587439d5e0adb5132d133941ab76' -var authToken = 'b4acf1212c0271d852706d17711e9670' -var client = require('twilio')(accountSid, authToken) +var Client = require('twilio') +var Config = require('./config') -client.messages.create({ - body: '[Lamassu] ALERT Stale screen: acceptingFirstBill', - to: '+359899948650', - from: '+16035383222' -}, function (err, message) { - console.log(err) - console.log(message) +var toNumber = process.argv[2] + +Config.loadConfig() +.then(function (config) { + var _config = config.exchanges.plugins.settings.sms + var accountSid = _config.accountSid + var authToken = _config.authToken + var fromNumber = _config.fromNumber + + var client = Client(accountSid, authToken) + client.messages.create({ + body: '[Lamassu] ALERT Stale screen: acceptingFirstBill', + to: toNumber, + from: fromNumber + }, function (err, message) { + console.log(err) + console.log(message) + }) }) diff --git a/package.json b/package.json index 812dac1e..0d82a127 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "prompt": "^1.0.0", "promptly": "^1.1.0", "ramda": "^0.19.1", - "smtp-connection": "^2.2.1", + "smtp-connection": "^2.3.2", "twilio": "^3.3.0-edge", "web3": "^0.15.3", "wreck": "5.1.0"