|
|
@ -8,6 +8,10 @@ log.debug = log.verbose; |
|
|
|
var fs = require('fs'); |
|
|
|
var nodemailer = require('nodemailer'); |
|
|
|
|
|
|
|
var Storage = require('./storage'); |
|
|
|
var MessageBroker = require('./messagebroker'); |
|
|
|
var Lock = require('./lock'); |
|
|
|
|
|
|
|
var Model = require('./model'); |
|
|
|
|
|
|
|
var EMAIL_TYPES = { |
|
|
@ -38,21 +42,47 @@ var EMAIL_TYPES = { |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
function EmailService(opts) { |
|
|
|
$.checkArgument(opts); |
|
|
|
function EmailService() {}; |
|
|
|
|
|
|
|
EmailService.prototype.start = function(opts, cb) { |
|
|
|
opts = opts || {}; |
|
|
|
$.checkArgument(opts.storageOpts); |
|
|
|
$.checkArgument(opts.messageBrokerOpts); |
|
|
|
$.checkArgument(opts.lockOpts); |
|
|
|
$.checkArgument(opts.emailOpts); |
|
|
|
|
|
|
|
opts.emailOpts = opts.emailOpts || {}; |
|
|
|
var self = this; |
|
|
|
|
|
|
|
this.storage = opts.storage; |
|
|
|
this.lock = opts.lock; |
|
|
|
this.mailer = opts.mailer || nodemailer.createTransport(opts.emailOpts); |
|
|
|
this.subjectPrefix = opts.emailOpts.subjectPrefix || '[Wallet service]'; |
|
|
|
this.from = opts.emailOpts.from; |
|
|
|
async.parallel([ |
|
|
|
|
|
|
|
$.checkState(this.mailer); |
|
|
|
$.checkState(this.from); |
|
|
|
function(done) { |
|
|
|
self.storage = new Storage(); |
|
|
|
self.storage.connect(opts.storageOpts, done); |
|
|
|
}, |
|
|
|
function(done) { |
|
|
|
self.messageBroker = new MessageBroker(opts.messageBrokerOpts); |
|
|
|
self.messageBroker.onMessage(_.bind(self.sendEmail, self)); |
|
|
|
done(); |
|
|
|
}, |
|
|
|
function(done) { |
|
|
|
self.lock = new Lock(opts.lockOpts); |
|
|
|
done(); |
|
|
|
}, |
|
|
|
function(done) { |
|
|
|
self.mailer = opts.mailer || nodemailer.createTransport(opts.emailOpts); |
|
|
|
self.subjectPrefix = opts.emailOpts.subjectPrefix || '[Wallet service]'; |
|
|
|
self.from = opts.emailOpts.from; |
|
|
|
done(); |
|
|
|
}, |
|
|
|
], function(err) { |
|
|
|
if (err) { |
|
|
|
log.error(err); |
|
|
|
} |
|
|
|
return cb(err); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// TODO: cache for X minutes
|
|
|
|
EmailService.prototype._readTemplate = function(filename, cb) { |
|
|
|
fs.readFile(__dirname + '/templates/' + filename + '.plain', 'utf8', function(err, template) { |
|
|
@ -144,6 +174,8 @@ EmailService.prototype._send = function(email, cb) { |
|
|
|
EmailService.prototype.sendEmail = function(notification, cb) { |
|
|
|
var self = this; |
|
|
|
|
|
|
|
cb = cb || function() {}; |
|
|
|
|
|
|
|
var emailType = EMAIL_TYPES[notification.type]; |
|
|
|
if (!emailType) return cb(); |
|
|
|
|
|
|
|