Newer
Older
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const
emailer = require('nodemailer'),
fs = require('fs'),
path = require('path'),
Lloyd Hilaiel
committed
config = require('./configuration.js'),
logger = require('./logging.js').logger;
/* if smtp parameters are configured, use them */
var smtp_params = config.get('smtp');
if (smtp_params && smtp_params.host) {
emailer.SMTP = { host: smtp_params.host };
logger.info("delivering email via SMTP host: " + emailer.SMTP.host);
if (smtp_params.user) {
emailer.SMTP.use_authentication = true;
emailer.SMTP.user = smtp_params.user;
emailer.SMTP.pass = smtp_params.pass;
logger.info("authenticating to email host as " + emailer.SMTP.user);
}
}
const template = ejs.compile(
fs.readFileSync(path.join(__dirname, "browserid", "prove_template.ejs")).toString());
var interceptor = undefined;
/**
* allow clients to intercept email messages programatically for local
* testing. The `interceptor` is a function which accepts three arguments,
*
* * `email` - the email that is being verified
* * `site` - the RP
* * `secret` - the verification secret (usually embedded into a url)
*
* Limitations: only a single interceptor may be set, generalize
* as needed.
*/
exports.setInterceptor = function(callback) {
interceptor = callback;
};
//TODO send in localeContext
function doSend(landing_page, email, site, secret, langContext) {
var url = config.get('URL') + "/" + landing_page + "?token=" + encodeURIComponent(secret),
_ = langContext.gettext,
strargs = langContext.strargs;
if (interceptor) {
interceptor(email, site, secret);
} else if (config.get('email_to_console')) {
// log verification email to console separated by whitespace.
Lloyd Hilaiel
committed
console.log("\nVERIFICATION URL:\n" + url + "\n");
} else {
// TODO(aok) extract_po.sh isn't seeing this string if it's below in object literal
var subject = strargs(_("Complete Login to %1 using BrowserID"), site);
emailer.send_mail({
sender: "BrowserID@browserid.org",
to: email,
subject: subject,
body: template({ link: url, site: site, gettext: _, strargs: strargs })
}, function(err, success){
if(!success) {
Lloyd Hilaiel
committed
logger.error("error sending email: " + err);
logger.error("verification URL: " + url);
}
});
};
Lloyd Hilaiel
committed
};
Lloyd Hilaiel
committed
exports.sendNewUserEmail = function(email, site, secret, langContext) {
doSend('verify_email_address', email, site, secret, langContext);
Lloyd Hilaiel
committed
};
exports.sendAddAddressEmail = function(email, site, secret, langContext) {
doSend('add_email_address', email, site, secret, langContext);