update ssu, email and sms

This commit is contained in:
Josh Harvey 2016-04-22 02:08:46 +03:00
parent e42bde7b63
commit 7e15308499
5 changed files with 117 additions and 53 deletions

80
bin/ssu
View file

@ -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 () { function configure () {
var plugin = argv[1] var plugin = argv[1]
var key = argv[2] var keys = argv.slice(2)
if (!plugin || !key) { if (!plugin || keys.length === 0) {
console.log('\nssu config <plugin> <key>') console.log('\nssu config <plugin> <key> [<key> ...]')
console.log('Configure a plugin setting.') console.log('Configure a plugin setting.')
process.exit(1) process.exit(1)
} }
inquirer.prompt([{ var questions = keys.map(function (key) {
type: 'password', return {
name: 'value', type: 'input',
message: 'Enter value for ' + key + ': ', name: key,
validate: function (val) { message: 'Enter value for ' + key + ':',
return !val || val.length === 0 validate: function (val) {
? 'Please enter a value for ' + key return !val || val.length === 0
: true ? 'Please enter a value for ' + key
: true
}
} }
}]).then(function (result) { })
var value = result.value inquirer.prompt(questions).then(function (result) {
var db = connect()
var psqlUrl return loadConfig(db)
try { .then(function (config) {
psqlUrl = process.env.DATABASE_URL || JSON.parse(fs.readFileSync('/etc/lamassu.json')).postgresql var _config = modifyConfig(config, plugin, keys, result)
} catch (ex) { return updateConfig(db, _config)
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"')
}) })
.then(function () { .then(function () {
console.log('success') console.log('success')

24
lib/config.js Normal file
View file

@ -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

View file

@ -1,4 +1,5 @@
var SMTPConnection = require('smtp-connection') var SMTPConnection = require('smtp-connection')
var Config = require('./config')
/* /*
@ -17,24 +18,31 @@ var options = {
} }
function send (from, to, subject, body, cb) { function send (from, to, subject, body, cb) {
var connection = new SMTPConnection(options) Config.loadConfig()
connection.connect(function () { .then(function (config) {
connection.login({user: 'josh@lamassu.is', pass: 'HPtXGp}9baafiqns%6YFH'}, function (err) { var _config = config.exchanges.plugins.settings.email
if (err) return console.error(err) var user = _config.user
var envelope = { var pass = _config.pass
from: from,
to: to var connection = new SMTPConnection(options)
} connection.connect(function () {
var message = 'Subject: ' + subject + '\n\n' + body connection.login({user: user, pass: pass}, function (err) {
connection.send(envelope, message, function (err, info) { if (err) return console.error(err)
connection.quit() var envelope = {
cb(err, info) 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(err)
console.log(info) console.log(info)
}) })

View file

@ -1,12 +1,22 @@
var accountSid = 'AC5b08587439d5e0adb5132d133941ab76' var Client = require('twilio')
var authToken = 'b4acf1212c0271d852706d17711e9670' var Config = require('./config')
var client = require('twilio')(accountSid, authToken)
client.messages.create({ var toNumber = process.argv[2]
body: '[Lamassu] ALERT Stale screen: acceptingFirstBill',
to: '+359899948650', Config.loadConfig()
from: '+16035383222' .then(function (config) {
}, function (err, message) { var _config = config.exchanges.plugins.settings.sms
console.log(err) var accountSid = _config.accountSid
console.log(message) 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)
})
}) })

View file

@ -41,7 +41,7 @@
"prompt": "^1.0.0", "prompt": "^1.0.0",
"promptly": "^1.1.0", "promptly": "^1.1.0",
"ramda": "^0.19.1", "ramda": "^0.19.1",
"smtp-connection": "^2.2.1", "smtp-connection": "^2.3.2",
"twilio": "^3.3.0-edge", "twilio": "^3.3.0-edge",
"web3": "^0.15.3", "web3": "^0.15.3",
"wreck": "5.1.0" "wreck": "5.1.0"