From 37f906aac68a8617dab1ccda177ef9a983d82679 Mon Sep 17 00:00:00 2001
From: Gospodin Bodurov <gospodin@bodurov.net>
Date: Tue, 18 Jun 2019 18:02:22 +0300
Subject: [PATCH] Add java signing service

---
 Gopkg.toml                              |  2 +-
 javascript/src/iframe/viamapi-iframe.js | 74 +++++++++++++++++++++++++
 2 files changed, 75 insertions(+), 1 deletion(-)

diff --git a/Gopkg.toml b/Gopkg.toml
index 349b503..6449b9c 100644
--- a/Gopkg.toml
+++ b/Gopkg.toml
@@ -25,7 +25,7 @@
 #   unused-packages = true
 
 [[constraint]]
-  branch = "master"
+  branch = "SSJ-1-signing-service-java-initial"
   name = "code.vereign.com/code/restful-api"
 
 [prune]
diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index 428d5ea..608ef56 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -1271,6 +1271,80 @@ const connection = Penpal.connectToParent({
 
       return encodeResponse("200", "", "Document signed");
     },
+    signDocumentJava: async (passportUUID, documentUUID, documentContentType) => {
+      const authenticationPublicKey = localStorage.getItem(
+        "authenticatedIdentity"
+      );
+
+      if (
+        !authenticationPublicKey ||
+        !window.loadedIdentities[authenticationPublicKey] ||
+        !extendPinCodeTtl(authenticationPublicKey)
+      ) {
+        return encodeResponse("400", "", "Identity not authenticated");
+      }
+
+      const certResponse = await getCertificateForPassport(passportUUID, true);
+
+      if (certResponse.code !== "200") {
+        return encodeResponse("400", "", certResponse.status);
+      }
+
+      const {
+        x509Certificate: passportCertificate,
+        privateKey: passportPrivateKey,
+        chain: passportChain
+      } = certResponse.data;
+
+      const keys = await createOneTimePassportCertificate(
+        makeid() + "-" + passportUUID,
+        null,
+        passportPrivateKey,
+        passportCertificate
+      );
+
+      const {
+        privateKeyPEM: privateKeyOneTime,
+        certificatePEM: certificateOneTime
+      } = keys;
+
+      passportChain.push(passportCertificate);
+      passportChain.push(certificateOneTime);
+
+      const pdfContentType = "application/pdf";
+
+      if (documentContentType !== pdfContentType) {
+        const convResponse = await executeRestfulFunction(
+          "private",
+          window.viamApi,
+          window.viamApi.documentConvertDocumentByUUID,
+          null,
+          documentUUID,
+          documentContentType,
+          pdfContentType
+        );
+        if (convResponse.code !== "200") {
+          return encodeResponse("400", "", convResponse.status);
+        }
+      }
+
+      const signResponse = await executeRestfulFunction(
+        "private",
+        window.viamApi,
+        window.viamApi.documentSignDocumentJavaService,
+        null,
+        privateKeyOneTime,
+        passportChain,
+        passportUUID,
+        documentUUID,
+        pdfContentType
+      );
+      if (signResponse.code !== "200") {
+        return encodeResponse("400", "", signResponse.status);
+      }
+
+      return encodeResponse("200", "", "Document signed");
+    },
     documentCreateDocument: async (passportUUID, path, contentType, title) => {
       const authenticationPublicKey = localStorage.getItem(
         "authenticatedIdentity"
-- 
GitLab