From e9152ebfb76d7a33311dbf2cef2c5d4437851183 Mon Sep 17 00:00:00 2001
From: Damyan Mitev <damyan.mitev@vereign.com>
Date: Tue, 1 Oct 2019 16:54:17 +0300
Subject: [PATCH] add manual validateDocument function - converts the
 certificate chain from PEM format (returned by
 documentValidateDocumentByUUID) into CertificateData object

---
 javascript/src/iframe/viamapi-iframe.js | 38 ++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index aec4b16..53e0e1a 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -20,10 +20,11 @@ import {
 } from "../utilities/appUtility";
 import { LOGIN_MODES } from "../constants/authentication";
 import {
+  CertificateData,
   createOneTimePassportCertificate,
   createPassportCertificate,
   decryptMessage,
-  encryptMessage,
+  encryptMessage, parseCertificate,
   signEmail,
   verifySMIME
 } from "../utilities/signingUtilities";
@@ -1095,6 +1096,41 @@ const connection = Penpal.connectToParent({
 
       return encodeResponse("200", verificationResult.verified, verificationResult.message);
     },
+    validateDocument: async (documentUUID, contentType) => {
+      const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
+
+      if (
+        !authenticationPublicKey ||
+        !window.loadedIdentities[authenticationPublicKey] ||
+        !extendPinCodeTtl(authenticationPublicKey)
+      ) {
+        return encodeResponse("400", "", "Identity not authenticated");
+      }
+
+      const validateDocumentResponse = await executeRestfulFunction(
+        "private",
+        window.viamApi,
+        window.viamApi.documentValidateDocumentByUUID,
+        null,
+        documentUUID,
+        contentType);
+
+      if (validateDocumentResponse.code !== "200") {
+        return encodeResponse("400", "", validateDocumentResponse.status);
+      }
+
+      const signatures = validateDocumentResponse.data;
+      for (const signature of signatures) {
+        const certificateChain = signature.certificateChainPEM.map((certificatePEM) => {
+          const certificate = parseCertificate(certificatePEM);
+          const certificateData = new CertificateData(certificate);
+          return certificateData;
+        });
+        signature.certificateChain = certificateChain;
+      }
+
+      return validateDocumentResponse;
+    },
     signEmail: async (passportUUID, emailArg, emailMessage) => {
       const authenticationPublicKey = localStorage.getItem(
         "authenticatedIdentity"
-- 
GitLab