initial commit

This commit is contained in:
John Shaver 2019-09-04 00:06:15 -07:00
commit 1cda61f376
4 changed files with 93 additions and 0 deletions

13
errorSender.js Normal file
View file

@ -0,0 +1,13 @@
module.exports = function(req, res, next) {
res.sendError = function(code, text) {
try {
res.status(code).type('json').send(JSON.stringify({
error: text
}));
} catch(err) {
console.error("Error formatting error response: ", err);
res.sendStatus(500);
}
}
next();
}

58
index.js Normal file
View file

@ -0,0 +1,58 @@
let fs = require('fs');
let bodyParser = require('body-parser');
let outbound = require('./outbound');
let getTemplates = require('./templates');
let errorSender = require('./errorSender');
exports.register = function() {
this.register_hook('hook_init_http', function(next, server) {
server.http.app.use('/webSend', setupRoutes(server.http.express.Router()));
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;
}

11
package.json Normal file
View file

@ -0,0 +1,11 @@
{
"name": "haraka-plugin-webmailer",
"version": "1.0.0",
"description": "Plugin to add our webhooks to haraka",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "john@rootprojects.com",
"license": "UNLICENSED"
}

11
templater.js Normal file
View file

@ -0,0 +1,11 @@
let escape = require("lodash/escape");
module.exports = function(strings) {
//first element is the strings, don't need it
let args = arguments.slice(1);
//first element will be the initial value
return strings.slice(1).reduce(function(result, string, i) {
return result + escape(args[i]) + string;
}, strings[0]);
};