diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js index aec4b16e3ef7deb60d5d35927e56c967b261bc4b..53e0e1ae83568b2c2b18acde8196260ccc4154ce 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"