From ce1ded590cdf6442ea0c579e757e33f977f5fd05 Mon Sep 17 00:00:00 2001 From: Taylor Russ Date: Sun, 5 Oct 2014 22:37:34 -0700 Subject: [PATCH] Separate text sending into it's own module. --- lib/text.js | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ server/app.js | 35 ++++------------------- 2 files changed, 82 insertions(+), 30 deletions(-) create mode 100644 lib/text.js diff --git a/lib/text.js b/lib/text.js new file mode 100644 index 0000000..869b8be --- /dev/null +++ b/lib/text.js @@ -0,0 +1,77 @@ +var providers = require('./providers.js') + , _ = require('underscore') + , exec = require('child_process').exec + , spawn = require('child_process').spawn; + +var debugEnabled = false; + +//---------------------------------------------------------------- +/* + General purpose logging function, gated by a configurable + value. +*/ +function output() { + if (debugEnabled === true) { + return console.log.apply(this, arguments); + } +} + +//---------------------------------------------------------------- +/* Enable verbosity for the text module. + + If enabled, logging functions will + print to stdout. + + Params: + enable - bool +*/ +function debug(enable) { + debugEnabled = enable; + return debugEnabled; +} + +//---------------------------------------------------------------- +/* Sends a text message + + Will perform a region lookup (for providers), then + send a message to each. + + Params: + phone - phone number to text + message - message to send + region - region to use (defaults to US) + cb - function(err), provides err messages +*/ +function sendText(phone, message, region, cb) { + output('txting phone', phone, ':', message); + + region = region || 'us'; + + var providers_list = providers[region]; + + var done = _.after(providers_list.length, function() { + cb(false); + }); + + _.each(providers_list, function(provider) { + var email = provider.replace('%s', phone); + email = 'Subject: Text\r\n\r\n' + email; + var child = spawn('sendmail', ['-f', 'txt2@textbelt.com', email]); + child.stdout.on('data', output); + child.stderr.on('data', output); + child.on('error', function(data) { + output('sendmail failed', {email: email, data: data}); + done(); + }); + child.on('exit', function(code, signal) { + done(); + }); + child.stdin.write(message + '\n.'); + child.stdin.end(); + }); +} + +module.exports = { + send: sendText, // Send a text message + debug: debug // Enable or disable debug output +}; diff --git a/server/app.js b/server/app.js index 37cb0a5..16a2fff 100644 --- a/server/app.js +++ b/server/app.js @@ -6,8 +6,11 @@ var express = require('express') , exec = require('child_process').exec , spawn = require('child_process').spawn , Stream = require('stream') - , providers = require('../lib/providers.js') , redis = require('redis-url').connect() + , text = require('../lib/text'); + +// Enable log messages when sending texts. +text.debug(true); // Optional modules var banned_numbers; @@ -105,7 +108,7 @@ function textRequestHandler(req, res, number, region, key) { response_obj = response_obj || {}; // Time to actually send the message - sendText(number, message, region, function(err) { + text.send(number, message, region, function(err) { if (err) { mpq.track('sendText failed', tracking_details); res.send(_.extend(response_obj, @@ -196,34 +199,6 @@ function stripPhone(phone) { return (phone+'').replace(/\D/g, ''); } -function sendText(phone, message, region, cb) { - console.log('txting phone', phone, ':', message); - - region = region || 'us'; - - var providers_list = providers[region]; - - var done = _.after(providers_list.length, function() { - cb(false); - }); - - _.each(providers_list, function(provider) { - var email = provider.replace('%s', phone); - email = 'Subject: Text\r\n\r\n' + email; - var child = spawn('sendmail', ['-f', 'txt2@textbelt.com', email]); - child.stdout.on('data', console.log); - child.stderr.on('data', console.log); - child.on('error', function(data) { - mpq.track('sendmail failed', {email: email, data: data}); - done(); - }); - child.on('exit', function(code, signal) { - done(); - }); - child.stdin.write(message + '\n.'); - child.stdin.end(); - }); -} // Start server var port = process.env.PORT || 9090;