var nodemailer = require('nodemailer'); var nconf = require('nconf'); var crypto = require('crypto'); var path = require("path"); var request = require('request'); module.exports.ga = undefined; // set Google Analytics on nconf init module.exports.sendEmail = function(mailData) { var smtpTransport = nodemailer.createTransport("SMTP",{ service: nconf.get('SMTP_SERVICE'), auth: { user: nconf.get('SMTP_USER'), pass: nconf.get('SMTP_PASS') } }); smtpTransport.sendMail(mailData, function(error, response){ var logging = require('./logging'); if(error) logging.error(error); else logging.info("Message sent: " + response.message); smtpTransport.close(); // shut down the connection pool, no more messages }); } function getMailingInfo(user) { var email, name; if(user.auth.local && user.auth.local.email){ email = user.auth.local.email; name = user.profile.name || user.auth.local.username; }else if(user.auth.facebook && user.auth.facebook.emails && user.auth.facebook.emails[0] && user.auth.facebook.emails[0].value){ email = user.auth.facebook.emails[0].value; name = user.auth.facebook.displayName || user.auth.facebook.username; } return {email: email, name: name}; } module.exports.txnEmail = function(mailingInfo, emailType, variables){ var variables = [{name: 'BASE_URL', content: nconf.get('BASE_URL')}].concat(variables || []); if (mailingInfo._id) mailingInfo = getMailingInfo(mailingInfo); if (!mailingInfo.email) return; request({ url: nconf.get('EMAIL_SERVER:url') + '/job', method: 'POST', auth: { user: nconf.get('EMAIL_SERVER:authUser'), pass: nconf.get('EMAIL_SERVER:authPassword') }, json: { type: 'email', data: { emailType: emailType, to: { name: mailingInfo.name, email: mailingInfo.email }, variables: variables }, options: { attemps: 5, backoff: {delay: 10*60*1000, type: 'fixed'} } } }); } // Encryption using http://dailyjs.com/2010/12/06/node-tutorial-5/ // Note: would use [password-hash](https://github.com/davidwood/node-password-hash), but we need to run // model.query().equals(), so it's a PITA to work in their verify() function module.exports.encryptPassword = function(password, salt) { return crypto.createHmac('sha1', salt).update(password).digest('hex'); } module.exports.makeSalt = function() { var len = 10; return crypto.randomBytes(Math.ceil(len / 2)).toString('hex').substring(0, len); } /** * Load nconf and define default configuration values if config.json or ENV vars are not found */ module.exports.setupConfig = function(){ nconf.argv() .env() //.file('defaults', path.join(path.resolve(__dirname, '../config.json.example'))) .file('user', path.join(path.resolve(__dirname, '../config.json'))); if (nconf.get('NODE_ENV') === "development") Error.stackTraceLimit = Infinity; if (nconf.get('NODE_ENV') === 'production') require('newrelic'); module.exports.ga = require('universal-analytics')(nconf.get('GA_ID')); }; var algorithm = 'aes-256-ctr'; module.exports.encrypt = function(text){ var cipher = crypto.createCipher(algorithm,nconf.get('SESSION_SECRET')) var crypted = cipher.update(text,'utf8','hex') crypted += cipher.final('hex'); return crypted; } module.exports.decrypt = function(text){ var decipher = crypto.createDecipher(algorithm,nconf.get('SESSION_SECRET')) var dec = decipher.update(text,'hex','utf8') dec += decipher.final('utf8'); return dec; }