From ebdc3358fc72f06e7acc1f9d55d3cd09f90ac37a Mon Sep 17 00:00:00 2001 From: Alexey Lunin <alexey.lunin@vereign.com> Date: Wed, 6 Mar 2019 12:18:02 +0400 Subject: [PATCH] Split email participants by comma in to, from, cc fields --- javascript/package.json | 1 + javascript/src/helpers/mailparser.js | 18 +++++------------- javascript/src/utilities/emailUtilities.js | 19 +++++++++++++++---- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/javascript/package.json b/javascript/package.json index 1cc608b..bab32fc 100644 --- a/javascript/package.json +++ b/javascript/package.json @@ -28,6 +28,7 @@ "data-uri-to-blob": "^0.0.4", "libmime": "^4.0.1", "libqp": "^1.1.0", + "lodash": "^4.17.11", "penpal": "^3.0.3", "pkijs": "^2.1.69", "pvutils": "^1.0.16", diff --git a/javascript/src/helpers/mailparser.js b/javascript/src/helpers/mailparser.js index 8fd6f11..5ff8dd5 100644 --- a/javascript/src/helpers/mailparser.js +++ b/javascript/src/helpers/mailparser.js @@ -154,7 +154,7 @@ export function parseMIME(mime) { parts.push({ indices: { from: 0, to: mime.length, headersEnd: headersEnd }, - headers: headers, + headers, boundary: "mimemessage" }); @@ -162,19 +162,11 @@ export function parseMIME(mime) { } function getHeaderValue(header, part) { - if (part.headers !== null && part.headers !== undefined) { - if (part.headers[header] !== null && part.headers[header] !== undefined) { - if (part.headers[header].length > 0) { - return part.headers[header]; - } else { - return null; - } - } else { - return null; - } - } else { - return null; + if (part.headers && part.headers[header] && part.headers[header].length) { + return part.headers[header]; } + + return null; } export function getGlobalHeaderValue(header, parts) { diff --git a/javascript/src/utilities/emailUtilities.js b/javascript/src/utilities/emailUtilities.js index 7bc1971..bd26ac7 100644 --- a/javascript/src/utilities/emailUtilities.js +++ b/javascript/src/utilities/emailUtilities.js @@ -1,5 +1,7 @@ import dataUriToBlob from "data-uri-to-blob"; import libmime from 'libmime'; +import map from 'lodash/map'; +import union from 'lodash/union'; import { fixNewLines, @@ -15,6 +17,11 @@ import { getCertificateChain } from "./signingUtilities"; const SIGNATURE_CONTENT_TYPE = "application/pkcs7-signature"; export const DEFAULT_ATTACHMENT_NAME = 'attachment'; +const splitParticipants = participantsList => { + const participants = map(participantsList, participants => participants.split(",").map(p => p.trim())); + return union.apply(null, participants); +}; + export const parseSMIME = smimeString => { return new Promise(resolve => { setTimeout(async () => { @@ -48,10 +55,14 @@ export const parseSMIME = smimeString => { const certificateChain = getCertificateChain(signatureBase64); + const from = splitParticipants(getGlobalHeaderValue("from", parts)); + const to = splitParticipants(getGlobalHeaderValue("to", parts)); + const cc = splitParticipants(getGlobalHeaderValue("cc", parts)); + const message = { - from: getGlobalHeaderValue("from", parts), - to: getGlobalHeaderValue("to", parts), - cc: getGlobalHeaderValue("cc", parts), + from, + to, + cc, subject: getGlobalHeaderValue("subject", parts).join(" "), html: extractHtmlBodyFromString(html), plain, @@ -101,4 +112,4 @@ export const extractHtmlBodyFromString = string => { } return body; -}; \ No newline at end of file +}; -- GitLab