diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js index 30d09656ae9256225d4d64ed847f8a6e473a083a..487aa5b7d1e3a3c95e4e3ed184a78d05c3b91ca6 100644 --- a/javascript/src/iframe/viamapi-iframe.js +++ b/javascript/src/iframe/viamapi-iframe.js @@ -21,6 +21,7 @@ import { import { LOGIN_MODES } from "../constants/authentication"; import { CertificateData, + ImageData, createOneTimePassportCertificate, createPassportCertificate, decryptMessage, @@ -1439,7 +1440,7 @@ const connection = Penpal.connectToParent({ return encodeResponse("400", "", vCardImageResponse.status); } - const vCardImageData = vCardImageResponse.data; + const vCardImageData = new ImageData(vCardImageResponse.data); if (vCardImageData.contentType !== "image/png") { return encodeResponse("400", "", "Content type of vCard mmust be 'image/png'"); @@ -1514,7 +1515,8 @@ const connection = Penpal.connectToParent({ return encodeResponse("400", "", signVCardResponse.status); } - return encodeResponse("200", signVCardResponse.data, "vCard signed"); + const signedVCardImageData = new ImageData(signVCardResponse.data); + return encodeResponse("200", signedVCardImageData, "vCard signed"); }, documentCreateDocument: async (passportUUID, path, contentType, title) => { const authenticationPublicKey = localStorage.getItem( diff --git a/javascript/src/utilities/signingUtilities.js b/javascript/src/utilities/signingUtilities.js index 45c41446ea72a64e18a704e66a0efd7bee7399c7..3ecb0fd520d9872954d42dfbb478fe0e63c19bed 100644 --- a/javascript/src/utilities/signingUtilities.js +++ b/javascript/src/utilities/signingUtilities.js @@ -26,7 +26,14 @@ import { getFilenameFromHeaders, SIGNATURE_CONTENT_TYPE } from "./emailUtilities"; - +import { + stringToUtf8ByteArray, + utf8ByteArrayToString, + stringToUtf8Base64, + utf8Base64ToString, + base64ToByteArray, + byteArrayToBase64 +} from "../utilities/stringUtilities"; const libmime = require("libmime"); const pkijs = require("pkijs"); const asn1js = require("asn1js"); @@ -1446,5 +1453,75 @@ export const verifySMIME = (smimeString, rootCaPem) => { }); }; +export class ImageData { + + /** + * Constructor for ImageData class + * @param {Object} [parameters] Object in format + * { + * contentType: String, + * content: String -- base64 encoded + * } + */ + constructor(parameters = {}) { + this.contentType = null; //string: the content type + this.content = null; // Uint8Array: decoded content + this.contentBase64 = null; // string: base64 encoded content + + if (typeof parameters === "object") { + this.fromParameters(parameters); + } + } + + fromParameters(parameters) { + if ("contentType" in parameters) { + this.contentType = parameters.contentType; + } + + if ("content" in parameters) { + this.content = parameters.content; + } + + if ("contentBase64" in parameters) { + this.contentBase64 = parameters.contentBase64; + } + + this.getContent(); + this.getContentBase64(); + } + + //fromDataURL() + //fromContentTypeAndContentAsByteArray() + + toDataURL() { + return "data:" + this.contentType + ";base64," + this.getContentBase64(); + } + + getContent() { + if (!this.content) { + if (this.contentBase64) { + this.content = base64ToByteArray(this.contentBase64); + } + } + return this.content; + } + + getContentBase64() { + if (!this.contentBase64) { + if (this.content) { + this.contentBase64 = byteArrayToBase64(this.content); + } + } + return this.contentBase64; + } + + toJSON() { + return { + "contentType": this.contentType, + "contentBase64": this.getContentBase64() + }; + } +} + //Initialization block fixPkijsRDN();