diff --git a/javascript/package.json b/javascript/package.json index 1cc608b267fb1be5d7df4e7551dca5cb29716d6b..bab32fc9af6cad2dda7cab5aa4307bebd8a0a301 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 8fd6f11fe5bcbd4f5259b0f4d7e306ab891543b1..5ff8dd5191a414657c5cbfb9362e531645f3369a 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 7bc1971b2afc9248124784529618b4fafd2ef936..bd26ac73bd9cdf06e56cbab770f6cedbeb0771b9 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 +};