From cd9bece8c3da103acc321449ccf71e0e75c5915b Mon Sep 17 00:00:00 2001
From: Damyan Mitev <damyan.mitev@vereign.com>
Date: Wed, 27 Nov 2019 17:17:41 +0200
Subject: [PATCH] add extractMessageID to penpal methods

---
 javascript/src/helpers/mailparser.js    | 21 +++++++++++++++++++++
 javascript/src/iframe/viamapi-iframe.js |  6 ++++++
 2 files changed, 27 insertions(+)

diff --git a/javascript/src/helpers/mailparser.js b/javascript/src/helpers/mailparser.js
index a6da68a..2471b8f 100644
--- a/javascript/src/helpers/mailparser.js
+++ b/javascript/src/helpers/mailparser.js
@@ -122,6 +122,27 @@ export function fixNewLines(mime) {
   return mime.replace(newline, "\r\n");
 }
 
+export function extractMessageID(mime) {
+  if (mime.startsWith("\r\n")) {
+    mime = mime.substring(2); //should not happen
+  }
+  const headersEndIndex = mime.indexOf("\r\n\r\n"); //the first empty line
+  if (headersEndIndex < 0) {
+    return null;
+  }
+  const mimeHeaders = mime.substring(0, headersEndIndex);
+  const headers = libmime.decodeHeaders(mimeHeaders);
+  let messageId = headers["Message-ID"];
+  if (Array.isArray(messageId) && messageId.length > 0) {
+    messageId = messageId[0];
+  }
+  if (messageId && typeof messageId === "string") {
+    messageId = messageId.replace(/^</, '').replace(/>$/, '');
+    return messageId;
+  }
+  return null;
+}
+
 export function parseMIME(mime) {
   let mimeStart = 0;
   let headersEnd = mime.indexOf("\r\n\r\n"); //the first empty line
diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index a4c1db1..370ce07 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -7,6 +7,7 @@ import {
   base64ToByteArray,
   byteArrayToBase64
 } from "../utilities/stringUtilities";
+import { extractMessageID } from "../helpers/mailparser";
 
 const QRCode = require("qrcode");
 const Penpal = require("penpal").default;
@@ -1740,6 +1741,11 @@ const connection = Penpal.connectToParent({
         "Currently authenticated identity"
       );
     },
+    extractMessageID(mime) {
+      return new Penpal.Promise(result => {
+        result(extractMessageID(mime));
+      });
+    },
     stringToUtf8ByteArray(str) {
       return new Penpal.Promise(result => {
         result(stringToUtf8ByteArray(str));
-- 
GitLab