From 052c6212a828c44c6e951a58ac2fe355978d9e92 Mon Sep 17 00:00:00 2001 From: Damyan Mitev <damyan.mitev@vereign.com> Date: Wed, 13 Nov 2019 23:13:36 +0200 Subject: [PATCH] introduce ImageData class --- javascript/src/iframe/viamapi-iframe.js | 6 +- javascript/src/utilities/signingUtilities.js | 79 +++++++++++++++++++- 2 files changed, 82 insertions(+), 3 deletions(-) diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js index 30d0965..487aa5b 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 45c4144..3ecb0fd 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(); -- GitLab