postmailer
Version:
HTTP POST -> SMTP proxy, as Express middleware
69 lines (64 loc) • 1.97 kB
JavaScript
var UriTemplate = require('uri-templates');
function Transform(obj) {
var emailTemplate = UriTemplate(obj.email);
var urlTemplates = [].concat(obj.urls || obj.url || []).map(UriTemplate);
var name = obj.name;
var restricted = obj.restricted;
this.emailForUrl = function (url, includeRestricted) {
if (!includeRestricted && restricted) return null;
var urls = [].concat(url);
for (var i = 0; i < urlTemplates.length; i++) {
for (var j = 0; j < urls.length; j++) {
var params = urlTemplates[i].fromUri(urls[j]);
if (params) return emailTemplate.fill(params);
}
}
return null;
};
this.urlsForEmail = function (email, includeRestricted) {
if (!includeRestricted && restricted) return [];
var params = emailTemplate.fromUri(email);
if (params) return urlTemplates.map(function (template) {
return template.fill(params);
});
return [];
};
this.nameForUrl = function (url, includeRestricted) {
var email = this.emailForUrl(url, includeRestricted);
if (!email) return null;
if (typeof name === 'function') {
return name(url, email);
} else {
return name || (url + "");
}
};
}
Transform.prototype = {};
function Mapping(transforms) {
var transforms = [].concat(transforms).map(function (transform) {
return new Transform(transform);
});
this.emailForUrl = function (url, mustBeOpen) {
for (var i = 0; i < transforms.length; i++) {
var email = transforms[i].emailForUrl(url, mustBeOpen);
if (email) return email;
}
return null;
};
this.urlsForEmail = function (email, mustBeOpen) {
var urls = [];
for (var i = 0; i < transforms.length; i++) {
urls = urls.concat(transforms[i].urlsForEmail(email, mustBeOpen));
}
return urls;
};
this.nameForUrl = function (url, mustBeOpen) {
for (var i = 0; i < transforms.length; i++) {
var name = transforms[i].nameForUrl(url, mustBeOpen);
if (name) return name;
}
return null;
};
}
Mapping.prototype = {};
module.exports = Mapping;