create ENCRYPTED_EMAIL and IV merge tags to use in unsubscribe link template

This commit is contained in:
Shamil Mingaliev 2019-12-13 16:08:14 +03:00
parent 3b365701bb
commit e55fa93d18
4 changed files with 21 additions and 4 deletions

View file

@ -6,4 +6,4 @@ enabled=true
host="redis"
[reports]
enabled=true
enabled=true

View file

@ -358,7 +358,8 @@ module.exports.getWithMergeTags = (listId, cid, callback) => {
FIRST_NAME: subscription.firstName,
LAST_NAME: subscription.lastName,
FULL_NAME: [].concat(subscription.firstName || []).concat(subscription.lastName || []).join(' '),
TIMEZONE: subscription.tz || ''
TIMEZONE: subscription.tz || '',
...tools.artstationMergeTags(subscription),
};
fields.getRow(fieldList, subscription, false, true).forEach(field => {

View file

@ -14,6 +14,8 @@ let _ = require('./translate')._;
let util = require('util');
let createDOMPurify = require('dompurify');
let htmlToText = require('html-to-text');
let crypto = require('crypto')
let process = require('process')
let blockedUsers = ['abuse', 'admin', 'billing', 'compliance', 'devnull', 'dns', 'ftp', 'hostmaster', 'inoc', 'ispfeedback', 'ispsupport', 'listrequest', 'list', 'maildaemon', 'noc', 'noreply', 'noreply', 'null', 'phish', 'phishing', 'postmaster', 'privacy', 'registrar', 'root', 'security', 'spam', 'support', 'sysadmin', 'tech', 'undisclosedrecipients', 'unsubscribe', 'usenet', 'uucp', 'webmaster', 'www'];
@ -30,6 +32,7 @@ module.exports = {
prepareHtml,
purifyHTML,
mergeTemplateIntoLayout,
artstationMergeTags,
workers: new Set()
};
@ -211,7 +214,7 @@ function formatMessage(serviceUrl, campaign, list, subscription, message, filter
return false;
};
let tagReplace = message =>
let tagReplace = message =>
message.replace(/\[([a-z0-9_]+)(?:\/([^\]]+))?\]/ig, (match, identifier, fallback) => {
identifier = identifier.toUpperCase();
let value = getTagValue(identifier);
@ -321,3 +324,15 @@ function mergeTemplateIntoLayout(template, layout, callback) {
return done(template, layout);
}
}
function artstationMergeTags(subscription) {
const iv = crypto.randomBytes(16)
const cipher = crypto.createCipheriv('aes-256-cbc', process.env.ARTSTATION_SECRET, iv)
let encrypted_email = cipher.update(subscription.email, 'utf8', 'hex')
encrypted_email += cipher.final('hex')
return {
ENCRYPTED_EMAIL: encrypted_email,
IV: iv.toString('hex'),
}
}

View file

@ -328,7 +328,8 @@ function formatMessage(message, callback) {
EMAIL: message.subscription.email,
FIRST_NAME: message.subscription.firstName,
LAST_NAME: message.subscription.lastName,
FULL_NAME: [].concat(message.subscription.firstName || []).concat(message.subscription.lastName || []).join(' ')
FULL_NAME: [].concat(message.subscription.firstName || []).concat(message.subscription.lastName || []).join(' '),
...tools.artstationMergeTags(message.subscription),
};
let encryptionKeys = [];