-
Notifications
You must be signed in to change notification settings - Fork 16
/
index.js
128 lines (103 loc) · 2.95 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
'use strict';
var nodemailer = require('nodemailer');
var ejs = require('ejs');
/**
* Email constructor function.
*
* @constructor
* @param {Object} config
*/
var Email = module.exports = function(config) {
if (!(this instanceof Email)) {return new Email(config); }
this.template = require(config.emailTemplate);
this.transport = require(config.emailType);
this.config = config;
};
/**
* Send email with nodemailer.
*
* @private
* @param {String} type
* @param {String} username
* @param {String} email
* @param {Function} done
*/
Email.prototype.send = function(type, username, email, done) {
var config = this.config;
var that = this;
var subject = config[type].subject;
var title = config[type].title;
var text = config[type].text;
this.template(title, text, function(err, html) {
if (err) {return done(err); }
// default local variables
var locals = {
appname: config.appname,
link: that.link,
username: username
};
// add options
var options = {
from: config.emailFrom,
to: email,
subject: ejs.render(subject, locals),
html: ejs.render(html, locals)
};
// send email with nodemailer
var transporter = nodemailer.createTransport(that.transport(config.emailSettings));
transporter.sendMail(options, function(error, res){
if(err) {return done(error); }
transporter.close(); // shut down the connection pool, no more messages
done(null, res);
});
});
};
/**
* Send signup email.
*
* @param {String} username
* @param {String} email
* @param {String} token
* @param {Function} done
*/
Email.prototype.signup = function(username, email, token, done) {
var c = this.config;
this.link = '<a href="' + c.url + c.signup.route + '/' + token + '">' + c.emailSignup.linkText + '</a>';
this.send('emailSignup', username, email, done);
};
/**
* Send signup email again.
*
* @param {String} username
* @param {String} email
* @param {String} token
* @param {Function} done
*/
Email.prototype.resend = function(username, email, token, done) {
var c = this.config;
this.link = '<a href="' + c.url + c.signup.route + '/' + token + '">' + c.emailResendVerification.linkText + '</a>';
this.send('emailResendVerification', username, email, done);
};
/**
* Send email to email address owner with notice about signup.
*
* @param {String} username
* @param {String} email
* @param {Function} done
*/
Email.prototype.taken = function(username, email, done) {
this.send('emailSignupTaken', username, email, done);
};
/**
* Send email with link for new password.
*
* @param {String} username
* @param {String} email
* @param {String} token
* @param {Function} done
*/
Email.prototype.forgot = function(username, email, token, done) {
var c = this.config;
this.link = '<a href="' + c.url + c.forgotPassword.route + '/' + token + '">' + c.emailForgotPassword.linkText + '</a>';
this.send('emailForgotPassword', username, email, done);
};