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 () {
var plugin = argv[1]
var key = argv[2]
var keys = argv.slice(2)
if (!plugin || !key) {
console.log('\nssu config <plugin> <key>')
if (!plugin || keys.length === 0) {
console.log('\nssu config <plugin> <key> [<key> ...]')
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')

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 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)
})

View file

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

View file

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