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