61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
let fs = require('fs');
|
|
|
|
let bodyParser = require('body-parser');
|
|
let outbound;
|
|
|
|
let getTemplates = require('./templater');
|
|
let errorSender = require('./errorSender');
|
|
exports.register = function() {
|
|
outbound = this.haraka_require('./outbound');
|
|
let plugin = this;
|
|
this.register_hook('hook_init_http', function(next, server) {
|
|
server.http.app.use('/webSend', setupRoutes(server.http.express.Router()));
|
|
server.http.app.get('/test', (req, res) => res.send("HELLO!"));
|
|
plugin.loginfo(server.http.app._router.stack);
|
|
next();
|
|
});
|
|
}
|
|
|
|
function setupRoutes(app) {
|
|
app.use(bodyParser.json());
|
|
app.use(errorSender);
|
|
|
|
app.post('/template', function(req, res) {
|
|
if(!req.body) {
|
|
return res.sendError(400, "No body provided.");
|
|
}
|
|
|
|
let {to, from, template, headers} = req.body;
|
|
if(!template) {
|
|
return res.sendError(400, "No template name provided.");
|
|
}
|
|
return getTemplates.then(function(templates) {
|
|
let emailText = `From: ${from}\nTo: ${to}`;
|
|
if(headers) {
|
|
headers.forEach(function(header) {
|
|
emailText += `\n${header}`;
|
|
});
|
|
}
|
|
try {
|
|
let [subject, body] = `\n\n${templates[template](req.body)}\n`;
|
|
emailText += `\nSubject: ${subject}\n\n${body}`;
|
|
} catch (err) {
|
|
console.error("Error building email from template: ", err);
|
|
res.sendError(err.httpStatus || 400, err.userMessage || "Error parsing template");
|
|
}
|
|
|
|
outbound.send_email(from, to, emailText, function(code, message) {
|
|
console.log(`Queue mail result code: ${code} msg: ${msg}`);
|
|
res.type("json").send(JSON.stringigy({
|
|
code,
|
|
message
|
|
}));
|
|
});
|
|
}).catch(function(err) {
|
|
console.error("Error loading templates:", err);
|
|
res.sendError(500, "Server Error");
|
|
});
|
|
});
|
|
|
|
return app;
|
|
}
|