From a482a92d34a82554cea0bbfd05b15544532f30b1 Mon Sep 17 00:00:00 2001
From: Rishab <33950743+rishabjasrotia@users.noreply.github.com>
Date: Thu, 16 Nov 2023 04:02:34 +0000
Subject: [PATCH 01/13] #168 - Align Modal to Center of PDF if Signed
---
.../SignDocuments/package-lock.json | 22 ++++++++++++++++++-
microfrontends/SignDocuments/package.json | 1 +
.../src/Component/SignYourselfPdf.js | 17 +++++++++++++-
.../src/Component/recipientSignPdf.js | 17 +++++++++++++-
4 files changed, 54 insertions(+), 3 deletions(-)
diff --git a/microfrontends/SignDocuments/package-lock.json b/microfrontends/SignDocuments/package-lock.json
index 30f707e44..4945bb084 100644
--- a/microfrontends/SignDocuments/package-lock.json
+++ b/microfrontends/SignDocuments/package-lock.json
@@ -36,6 +36,7 @@
"react-scrollbars-custom": "^4.1.1",
"react-signature-canvas": "^1.0.6",
"reactour": "^1.19.1",
+ "select-dom": "^9.0.0",
"web-vitals": "^2.1.4"
}
},
@@ -18702,6 +18703,20 @@
"resolved": "https://registry.npmjs.org/scrollparent/-/scrollparent-2.0.1.tgz",
"integrity": "sha512-HSdN78VMvFCSGCkh0oYX/tY4R3P1DW61f8+TeZZ4j2VLgfwvw0bpRSOv4PCVKisktIwbzHCfZsx+rLbbDBqIBA=="
},
+ "node_modules/select-dom": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/select-dom/-/select-dom-9.0.0.tgz",
+ "integrity": "sha512-AD1NfASSwJQc1Sy713R1vT9CMmUSUo2tg0j1FtkRGIxllTphDrkuH2pYYvhRlGaoq3pS6tcKkKS/diEZLy+7BQ==",
+ "dependencies": {
+ "typed-query-selector": "^2.11.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fregante"
+ }
+ },
"node_modules/select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@@ -20203,6 +20218,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/typed-query-selector": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.11.0.tgz",
+ "integrity": "sha512-qBs4sfmnLlPOyo2oSdvHbIFHe2CPgU54/1UGfSNceb7LARpIEVxUaeRX0Doje6oKpuySS2stqy90R3YrynR8Kg=="
+ },
"node_modules/typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
@@ -21527,4 +21547,4 @@
}
}
}
-}
+}
\ No newline at end of file
diff --git a/microfrontends/SignDocuments/package.json b/microfrontends/SignDocuments/package.json
index 97970e988..5bc6f7685 100644
--- a/microfrontends/SignDocuments/package.json
+++ b/microfrontends/SignDocuments/package.json
@@ -32,6 +32,7 @@
"react-scrollbars-custom": "^4.1.1",
"react-signature-canvas": "^1.0.6",
"reactour": "^1.19.1",
+ "select-dom": "^9.0.0",
"web-vitals": "^2.1.4"
},
"scripts": {
diff --git a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
index 6591667bc..ec1ce695b 100644
--- a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
+++ b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
@@ -25,6 +25,7 @@ import Nodata from "./component/Nodata";
import Header from "./component/header";
import RenderPdf from "./component/renderPdf";
import { contractUsers, contactBook } from "../utils/Utils";
+import { $ } from 'select-dom';
//For signYourself inProgress section signer can add sign and complete doc sign.
function SignYourSelf() {
const [pdfDetails, setPdfDetails] = useState([]);
@@ -995,6 +996,17 @@ function SignYourSelf() {
});
};
+ const modalAlign = () => {
+ let modalDialog = $('.modal-dialog').getBoundingClientRect();
+ let mobileHead = $('.mobileHead').getBoundingClientRect()
+ let modal = $('.modal-dialog');
+ if (modalDialog.left < mobileHead.left) {
+ let leftOffset = mobileHead.left - modalDialog.left;
+ modal.style.left = leftOffset + 'px';
+ modal.style.top = (window.innerHeight/2.5) + 'px';
+ }
+ };
+
return (
{isLoading.isLoad ? (
@@ -1036,7 +1048,10 @@ function SignYourSelf() {
>
{/* this modal is used show this document is already sign */}
-
+ modalAlign()}
+ >
Sign Documents
diff --git a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
index 77b3de40e..5c03b98b1 100644
--- a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
+++ b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
@@ -25,6 +25,7 @@ import Nodata from "./component/Nodata";
import Header from "./component/header";
import RenderPdf from "./component/renderPdf";
import CustomModal from "./component/CustomModal";
+import { $ } from 'select-dom';
function EmbedPdfImage() {
const { id, contactBookId } = useParams();
const [isSignPad, setIsSignPad] = useState(false);
@@ -953,6 +954,17 @@ function EmbedPdfImage() {
);
};
+ const modalAlign = () => {
+ let modalDialog = $('.modal-dialog').getBoundingClientRect();
+ let mobileHead = $('.mobileHead').getBoundingClientRect()
+ let modal = $('.modal-dialog');
+ if (modalDialog.left < mobileHead.left) {
+ let leftOffset = mobileHead.left - modalDialog.left;
+ modal.style.left = leftOffset + 'px';
+ modal.style.top = (window.innerHeight/2.5) + 'px';
+ }
+ };
+
return (
{isLoading.isLoad ? (
@@ -1016,7 +1028,10 @@ function EmbedPdfImage() {
}}
>
{/* this modal is used show this document is already sign */}
-
+ modalAlign()}
+ >
Sign Documents
From c43690faa8df16c0d9199a9b0d57dec36f05eca7 Mon Sep 17 00:00:00 2001
From: Rishab <33950743+rishabjasrotia@users.noreply.github.com>
Date: Thu, 16 Nov 2023 04:08:12 +0000
Subject: [PATCH 02/13] #126 - Fix UI layout issue after signing a document
from mobile
---
microfrontends/SignDocuments/src/css/signature.css | 1 -
1 file changed, 1 deletion(-)
diff --git a/microfrontends/SignDocuments/src/css/signature.css b/microfrontends/SignDocuments/src/css/signature.css
index 273b6990e..e2cebe9f3 100644
--- a/microfrontends/SignDocuments/src/css/signature.css
+++ b/microfrontends/SignDocuments/src/css/signature.css
@@ -629,7 +629,6 @@ option {
/* The sticky class is added to the navbar
with JS when it reaches its scroll position */
.stickyHead {
- position: fixed;
top: 50px;
left: 0.9rem;
}
From 6d2010facb3cc6fae53a4c1f2a25281fc185ea51 Mon Sep 17 00:00:00 2001
From: RaktimaNXG
Date: Thu, 16 Nov 2023 10:59:26 +0530
Subject: [PATCH 03/13] fix transparent PNG signature issue
---
.../src/Component/PdfRequestFiles.js | 70 +++++-------------
.../src/Component/SignYourselfPdf.js | 49 ++-----------
.../src/Component/recipientSignPdf.js | 71 +++++--------------
.../SignDocuments/src/utils/Utils.js | 33 +++++++--
4 files changed, 72 insertions(+), 151 deletions(-)
diff --git a/microfrontends/SignDocuments/src/Component/PdfRequestFiles.js b/microfrontends/SignDocuments/src/Component/PdfRequestFiles.js
index d741162d5..400f69930 100644
--- a/microfrontends/SignDocuments/src/Component/PdfRequestFiles.js
+++ b/microfrontends/SignDocuments/src/Component/PdfRequestFiles.js
@@ -11,7 +11,11 @@ import { HTML5Backend } from "react-dnd-html5-backend";
import { useParams } from "react-router-dom";
import SignPad from "./component/signPad";
import RenderAllPdfPage from "./component/renderAllPdfPage";
-import { getBase64FromIMG, getBase64FromUrl } from "../utils/Utils";
+import {
+ convertPNGtoJPEG,
+ getBase64FromIMG,
+ getBase64FromUrl
+} from "../utils/Utils";
import Loader from "./component/loader";
import HandleError from "./component/HandleError";
import Nodata from "./component/Nodata";
@@ -367,31 +371,6 @@ function PdfRequestFiles() {
ImgUrl = await getBase64FromIMG(ImgUrl + "?get");
}
//function for called convert png signatre to jpeg in base 64
- const convertPNGtoJPEG = (base64Data) => {
- return new Promise((resolve, reject) => {
- const canvas = document.createElement("canvas");
- const img = new Image();
- img.src = base64Data;
-
- img.onload = () => {
- canvas.width = img.width;
- canvas.height = img.height;
-
- const ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0);
-
- // Convert to JPEG by using the canvas.toDataURL() method
- const jpegBase64Data = canvas.toDataURL("image/jpeg");
-
- resolve(jpegBase64Data);
- };
-
- img.onerror = (error) => {
- reject(error);
- };
- });
- };
-
convertPNGtoJPEG(ImgUrl)
.then((jpegBase64Data) => {
const removeBase64Fromjpeg = "data:image/jpeg;base64,";
@@ -447,32 +426,21 @@ function PdfRequestFiles() {
const images = await Promise.all(
imgUrlList.map(async (url) => {
let signUrl = url.SignUrl;
-
+ if (url.ImageType === "image/png") {
+ //function for convert signature png base64 url to jpeg base64
+ const newUrl = await convertPNGtoJPEG(signUrl);
+ signUrl = newUrl;
+ }
const checkUrl = url.SignUrl.includes("https:");
if (checkUrl) {
signUrl = signUrl + "?get";
}
const res = await fetch(signUrl);
-
return res.arrayBuffer();
})
);
images.forEach(async (imgData, id) => {
- let img;
- if (
- imgUrlList[id].ImageType &&
- imgUrlList[id].ImageType === "image/jpeg"
- ) {
- img = await pdfDoc.embedJpg(imgData);
- } else if (
- imgUrlList[id].ImageType &&
- imgUrlList[id].ImageType === "image/png"
- ) {
- img = await pdfDoc.embedPng(imgData);
- } else {
- img = await pdfDoc.embedPng(imgData);
- }
-
+ let img = await pdfDoc.embedJpg(imgData);
const imgHeight = imgUrlList[id].Height
? imgUrlList[id].Height
: 60;
@@ -600,8 +568,8 @@ function PdfRequestFiles() {
yPosition = pos.isDrag
? y * scale - height
: pos.firstYPos
- ? y * scale - height + pos.firstYPos
- : y * scale - height;
+ ? y * scale - height + pos.firstYPos
+ : y * scale - height;
return yPosition;
} else {
const y = pos.yBottom / scale;
@@ -609,8 +577,8 @@ function PdfRequestFiles() {
yPosition = pos.isDrag
? y * scale - height
: pos.firstYPos
- ? y * scale - height + pos.firstYPos
- : y * scale - height;
+ ? y * scale - height + pos.firstYPos
+ : y * scale - height;
return yPosition;
}
} else {
@@ -621,15 +589,15 @@ function PdfRequestFiles() {
yPosition = pos.isDrag
? y - height
: pos.firstYPos
- ? y - height + pos.firstYPos
- : y - height;
+ ? y - height + pos.firstYPos
+ : y - height;
return yPosition;
} else {
yPosition = pos.isDrag
? pos.yBottom - height
: pos.firstYPos
- ? pos.yBottom - height + pos.firstYPos
- : pos.yBottom - height;
+ ? pos.yBottom - height + pos.firstYPos
+ : pos.yBottom - height;
return yPosition;
}
}
diff --git a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
index 6591667bc..0f7de9a65 100644
--- a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
+++ b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
@@ -15,7 +15,7 @@ import EmailComponent from "./component/emailComponent";
import FieldsComponent from "./component/fieldsComponent";
import Modal from "react-bootstrap/Modal";
import ModalHeader from "react-bootstrap/esm/ModalHeader";
-import { getBase64FromIMG } from "../utils/Utils";
+import { convertPNGtoJPEG, getBase64FromIMG } from "../utils/Utils";
import { useParams } from "react-router-dom";
import Tour from "reactour";
import { onSaveImage, onSaveSign } from "../utils/Utils";
@@ -466,33 +466,7 @@ function SignYourSelf() {
if (checkUrl) {
ImgUrl = await getBase64FromIMG(ImgUrl + "?get");
}
-
//function for convert signature png base64 url to jpeg base64
- const convertPNGtoJPEG = (base64Data) => {
- return new Promise((resolve, reject) => {
- const canvas = document.createElement("canvas");
- const img = new Image();
- img.src = base64Data;
-
- img.onload = () => {
- canvas.width = img.width;
- canvas.height = img.height;
-
- const ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0);
-
- // Convert to JPEG by using the canvas.toDataURL() method
- const jpegBase64Data = canvas.toDataURL("image/jpeg");
-
- resolve(jpegBase64Data);
- };
-
- img.onerror = (error) => {
- reject(error);
- };
- });
- };
-
convertPNGtoJPEG(ImgUrl)
.then((jpegBase64Data) => {
const removeBase64Fromjpeg = "data:image/jpeg;base64,";
@@ -540,6 +514,11 @@ function SignYourSelf() {
imgUrlList.map(async (url) => {
let signUrl = url.SignUrl;
+ if (url.ImageType === "image/png") {
+ //function for convert signature png base64 url to jpeg base64
+ const newUrl = await convertPNGtoJPEG(signUrl);
+ signUrl = newUrl;
+ }
const checkUrl = url.SignUrl.includes("https:");
if (checkUrl) {
signUrl = signUrl + "?get";
@@ -550,21 +529,7 @@ function SignYourSelf() {
})
);
images.forEach(async (imgData, id) => {
- let img;
- if (
- imgUrlList[id].ImageType &&
- imgUrlList[id].ImageType === "image/jpeg"
- ) {
- img = await pdfDoc.embedJpg(imgData);
- } else if (
- imgUrlList[id].ImageType &&
- imgUrlList[id].ImageType === "image/png"
- ) {
- img = await pdfDoc.embedPng(imgData);
- } else {
- img = await pdfDoc.embedPng(imgData);
- }
-
+ let img = await pdfDoc.embedJpg(imgData);
const imgHeight = imgUrlList[id].Height
? imgUrlList[id].Height
: 60;
diff --git a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
index 77b3de40e..53c822e85 100644
--- a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
+++ b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
@@ -14,7 +14,8 @@ import DefaultSignature from "./component/defaultSignature";
import {
getBase64FromUrl,
getBase64FromIMG,
- contactBookName
+ contactBookName,
+ convertPNGtoJPEG
} from "../utils/Utils";
import Tour from "reactour";
import Signedby from "./component/signedby";
@@ -450,32 +451,7 @@ function EmbedPdfImage() {
if (checkUrl) {
ImgUrl = await getBase64FromIMG(ImgUrl + "?get");
}
- //function for called convert png signatre to jpeg in base 64
- const convertPNGtoJPEG = (base64Data) => {
- return new Promise((resolve, reject) => {
- const canvas = document.createElement("canvas");
- const img = new Image();
- img.src = base64Data;
-
- img.onload = () => {
- canvas.width = img.width;
- canvas.height = img.height;
-
- const ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0);
-
- // Convert to JPEG by using the canvas.toDataURL() method
- const jpegBase64Data = canvas.toDataURL("image/jpeg");
-
- resolve(jpegBase64Data);
- };
-
- img.onerror = (error) => {
- reject(error);
- };
- });
- };
-
+ //function for convert signature png base64 url to jpeg base64
convertPNGtoJPEG(ImgUrl)
.then((jpegBase64Data) => {
const removeBase64Fromjpeg = "data:image/jpeg;base64,";
@@ -522,6 +498,11 @@ function EmbedPdfImage() {
const images = await Promise.all(
imgUrlList.map(async (url) => {
let signUrl = url.SignUrl;
+ if (url.ImageType === "image/png") {
+ //function for convert signature png base64 url to jpeg base64
+ const newUrl = await convertPNGtoJPEG(signUrl);
+ signUrl = newUrl;
+ }
const checkUrl = url.SignUrl.includes("https:");
if (checkUrl) {
signUrl = signUrl + "?get";
@@ -532,20 +513,7 @@ function EmbedPdfImage() {
})
);
images.forEach(async (imgData, id) => {
- let img;
- if (
- imgUrlList[id].ImageType &&
- imgUrlList[id].ImageType === "image/jpeg"
- ) {
- img = await pdfDoc.embedJpg(imgData);
- } else if (
- imgUrlList[id].ImageType &&
- imgUrlList[id].ImageType === "image/png"
- ) {
- img = await pdfDoc.embedPng(imgData);
- } else {
- img = await pdfDoc.embedPng(imgData);
- }
+ let img = await pdfDoc.embedJpg(imgData);
const imgHeight = imgUrlList[id].Height
? imgUrlList[id].Height
@@ -662,8 +630,8 @@ function EmbedPdfImage() {
yPosition = pos.isDrag
? y * scale - height
: pos.firstYPos
- ? y * scale - height + pos.firstYPos
- : y * scale - height;
+ ? y * scale - height + pos.firstYPos
+ : y * scale - height;
return yPosition;
} else {
const y = pos.yBottom / scale;
@@ -671,8 +639,8 @@ function EmbedPdfImage() {
yPosition = pos.isDrag
? y * scale - height
: pos.firstYPos
- ? y * scale - height + pos.firstYPos
- : y * scale - height;
+ ? y * scale - height + pos.firstYPos
+ : y * scale - height;
return yPosition;
}
} else {
@@ -683,15 +651,15 @@ function EmbedPdfImage() {
yPosition = pos.isDrag
? y - height
: pos.firstYPos
- ? y - height + pos.firstYPos
- : y - height;
+ ? y - height + pos.firstYPos
+ : y - height;
return yPosition;
} else {
yPosition = pos.isDrag
? pos.yBottom - height
: pos.firstYPos
- ? pos.yBottom - height + pos.firstYPos
- : pos.yBottom - height;
+ ? pos.yBottom - height + pos.firstYPos
+ : pos.yBottom - height;
return yPosition;
}
}
@@ -1083,7 +1051,7 @@ function EmbedPdfImage() {
isShowHeader={true}
currentSigner={true}
decline={true}
- alreadySign={pdfUrl ? true :false}
+ alreadySign={pdfUrl ? true : false}
/>
)}
-
);
}
-export default EmbedPdfImage;
\ No newline at end of file
+export default EmbedPdfImage;
diff --git a/microfrontends/SignDocuments/src/utils/Utils.js b/microfrontends/SignDocuments/src/utils/Utils.js
index 0b915423d..c2a87df1f 100644
--- a/microfrontends/SignDocuments/src/utils/Utils.js
+++ b/microfrontends/SignDocuments/src/utils/Utils.js
@@ -28,13 +28,35 @@ export async function getBase64FromIMG(url) {
};
});
}
+//function for convert signature png base64 url to jpeg base64
+export const convertPNGtoJPEG = (base64Data) => {
+ return new Promise((resolve, reject) => {
+ const canvas = document.createElement("canvas");
+ const img = new Image();
+ img.src = base64Data;
+
+ img.onload = () => {
+ canvas.width = img.width;
+ canvas.height = img.height;
+
+ const ctx = canvas.getContext("2d");
+ ctx.fillStyle = "#ffffff"; // white color
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ ctx.drawImage(img, 0, 0);
+ // Convert to JPEG by using the canvas.toDataURL() method
+ const jpegBase64Data = canvas.toDataURL("image/jpeg");
+
+ resolve(jpegBase64Data);
+ };
+
+ img.onerror = (error) => {
+ reject(error);
+ };
+ });
+};
export function getHostUrl() {
const hostUrl = window.location.href;
- /// const hostUrl = "https://contracts-defaultssty.qik.ai/#/mf/remoteUrl=aHR0cHM6Ly9xaWstYWktb3JnLmdpdGh1Yi5pby9TaWduLU1pY3JvYXBwVjIvcmVtb3RlRW50cnkuanM=&moduleToLoad=AppRoutes&remoteName=signmicroapp/legadrive";
- // const hostUrl = "https://contracts-defaultssty.qik.ai/#/"
- // const hostUrl = "https://lionfish-app-75ly7.ondigitalocean.app/mf/remoteUrl=aHR0cHM6Ly9xaWstYWktb3JnLmdpdGh1Yi5pby9TaWduLU1pY3JvYXBwVjIvcmVtb3RlRW50cnkuanM=&moduleToLoad=AppRoutes&remoteName=signmicroapp/legadrive"
- //const hostUrl = "https://app.opensignlabs.com/rpmf/remoteUrl=aHR0cHM6Ly9xaWstYWktb3JnLmdpdGh1Yi5pby9TaWduLU1pY3JvYXBwVjIvcmVtb3RlRW50cnkuanM=&moduleToLoad=AppRoutes&remoteName=signmicroapp/draftDocument";
if (hostUrl) {
const urlSplit = hostUrl.split("/");
@@ -57,7 +79,6 @@ export function onSaveImage(xyPostion, index, signKey, imgWH, image) {
(data, ind) =>
data.key === signKey && data.Width && data.Height && data.SignUrl
);
-
if (updateFilter.length > 0) {
let newWidth, newHeight;
@@ -139,7 +160,7 @@ export function onSaveImage(xyPostion, index, signKey, imgWH, image) {
...url,
Width: getPosData[0].Width ? getPosData[0].Width : newWidth,
Height: getPosData[0].Height ? getPosData[0].Height : newHeight,
- SignUrl: image.src,
+ SignUrl: image.src,
ImageType: image.imgType
};
}
From 16f287fdc0ac86af2e6fb23da8d144d86d2985ca Mon Sep 17 00:00:00 2001
From: rishabjasrotia
Date: Thu, 16 Nov 2023 20:03:59 +0530
Subject: [PATCH 04/13] Added backdrop to modal
---
.../src/Component/SignYourselfPdf.js | 3 ++-
.../src/Component/recipientSignPdf.js | 5 +++--
.../SignDocuments/src/css/signature.css | 18 ++++++++++++++----
3 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
index ec1ce695b..202af7702 100644
--- a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
+++ b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
@@ -1048,9 +1048,10 @@ function SignYourSelf() {
>
{/* this modal is used show this document is already sign */}
- modalAlign()}
+ backdropClassName="signature-backdrop"
>
Sign Documents
diff --git a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
index 5c03b98b1..48c0e97c9 100644
--- a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
+++ b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
@@ -1028,9 +1028,10 @@ function EmbedPdfImage() {
}}
>
{/* this modal is used show this document is already sign */}
- modalAlign()}
+ backdropClassName="signature-backdrop"
>
Sign Documents
@@ -1143,7 +1144,7 @@ function EmbedPdfImage() {
)}
)}
-
+
);
}
diff --git a/microfrontends/SignDocuments/src/css/signature.css b/microfrontends/SignDocuments/src/css/signature.css
index 273b6990e..e47a21f08 100644
--- a/microfrontends/SignDocuments/src/css/signature.css
+++ b/microfrontends/SignDocuments/src/css/signature.css
@@ -626,7 +626,7 @@ option {
padding: 16px;
}
- /* The sticky class is added to the navbar
+ /* The sticky class is added to the navbar
with JS when it reaches its scroll position */
.stickyHead {
position: fixed;
@@ -644,9 +644,9 @@ option {
right: 0rem;
}
- /* Add some top padding to the page content
- to prevent sudden quick movement (as the
- navigation bar gets a new position at the top of the
+ /* Add some top padding to the page content
+ to prevent sudden quick movement (as the
+ navigation bar gets a new position at the top of the
page (position:fixed and top:0) */
.stickyHead+.content {
padding-top: 60px;
@@ -776,4 +776,14 @@ option {
.mobileHead {
display: flex;
}
+}
+
+.signature-backdrop {
+ position: fixed;
+ top: 0; bottom: 0; left: 0; right: 0;
+ background-color: #000;
+}
+
+.signature-backdrop.fade.in {
+ opacity: 0.5;
}
\ No newline at end of file
From 876a2d78d504ddf0425e9fa67587ed5f19cd2670 Mon Sep 17 00:00:00 2001
From: rishabjasrotia
Date: Thu, 16 Nov 2023 20:06:57 +0530
Subject: [PATCH 05/13] enhancement
---
microfrontends/SignDocuments/src/Component/SignYourselfPdf.js | 2 +-
microfrontends/SignDocuments/src/Component/recipientSignPdf.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
index 202af7702..3cead71f4 100644
--- a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
+++ b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
@@ -1003,7 +1003,7 @@ function SignYourSelf() {
if (modalDialog.left < mobileHead.left) {
let leftOffset = mobileHead.left - modalDialog.left;
modal.style.left = leftOffset + 'px';
- modal.style.top = (window.innerHeight/2.5) + 'px';
+ modal.style.top = (window.innerHeight/3) + 'px';
}
};
diff --git a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
index 48c0e97c9..6c7369828 100644
--- a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
+++ b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
@@ -961,7 +961,7 @@ function EmbedPdfImage() {
if (modalDialog.left < mobileHead.left) {
let leftOffset = mobileHead.left - modalDialog.left;
modal.style.left = leftOffset + 'px';
- modal.style.top = (window.innerHeight/2.5) + 'px';
+ modal.style.top = (window.innerHeight/3) + 'px';
}
};
From b8e8cd127a58ca3c90e22209496e487435a98e44 Mon Sep 17 00:00:00 2001
From: rishabjasrotia
Date: Thu, 16 Nov 2023 20:14:32 +0530
Subject: [PATCH 06/13] Remove duplicate code
---
.../SignDocuments/src/Component/SignYourselfPdf.js | 12 +-----------
.../src/Component/recipientSignPdf.js | 13 +------------
microfrontends/SignDocuments/src/utils/Utils.js | 14 +++++++++++++-
3 files changed, 15 insertions(+), 24 deletions(-)
diff --git a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
index 3cead71f4..07b377d1c 100644
--- a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
+++ b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
@@ -25,6 +25,7 @@ import Nodata from "./component/Nodata";
import Header from "./component/header";
import RenderPdf from "./component/renderPdf";
import { contractUsers, contactBook } from "../utils/Utils";
+import { modalAlign } from "../utils/Utils";
import { $ } from 'select-dom';
//For signYourself inProgress section signer can add sign and complete doc sign.
function SignYourSelf() {
@@ -996,17 +997,6 @@ function SignYourSelf() {
});
};
- const modalAlign = () => {
- let modalDialog = $('.modal-dialog').getBoundingClientRect();
- let mobileHead = $('.mobileHead').getBoundingClientRect()
- let modal = $('.modal-dialog');
- if (modalDialog.left < mobileHead.left) {
- let leftOffset = mobileHead.left - modalDialog.left;
- modal.style.left = leftOffset + 'px';
- modal.style.top = (window.innerHeight/3) + 'px';
- }
- };
-
return (
{isLoading.isLoad ? (
diff --git a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
index 6c7369828..9a1bbab90 100644
--- a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
+++ b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
@@ -25,7 +25,7 @@ import Nodata from "./component/Nodata";
import Header from "./component/header";
import RenderPdf from "./component/renderPdf";
import CustomModal from "./component/CustomModal";
-import { $ } from 'select-dom';
+import { modalAlign } from "../utils/Utils";
function EmbedPdfImage() {
const { id, contactBookId } = useParams();
const [isSignPad, setIsSignPad] = useState(false);
@@ -954,17 +954,6 @@ function EmbedPdfImage() {
);
};
- const modalAlign = () => {
- let modalDialog = $('.modal-dialog').getBoundingClientRect();
- let mobileHead = $('.mobileHead').getBoundingClientRect()
- let modal = $('.modal-dialog');
- if (modalDialog.left < mobileHead.left) {
- let leftOffset = mobileHead.left - modalDialog.left;
- modal.style.left = leftOffset + 'px';
- modal.style.top = (window.innerHeight/3) + 'px';
- }
- };
-
return (
{isLoading.isLoad ? (
diff --git a/microfrontends/SignDocuments/src/utils/Utils.js b/microfrontends/SignDocuments/src/utils/Utils.js
index 0b915423d..2c960ceca 100644
--- a/microfrontends/SignDocuments/src/utils/Utils.js
+++ b/microfrontends/SignDocuments/src/utils/Utils.js
@@ -1,4 +1,5 @@
import axios from "axios";
+import { $ } from 'select-dom';
export async function getBase64FromUrl(url) {
const data = await fetch(url);
@@ -57,7 +58,7 @@ export function onSaveImage(xyPostion, index, signKey, imgWH, image) {
(data, ind) =>
data.key === signKey && data.Width && data.Height && data.SignUrl
);
-
+
if (updateFilter.length > 0) {
let newWidth, newHeight;
@@ -260,3 +261,14 @@ export const contactBookName = async (objectId, className) => {
});
return result;
};
+
+export const modalAlign = () => {
+ let modalDialog = $('.modal-dialog').getBoundingClientRect();
+ let mobileHead = $('.mobileHead').getBoundingClientRect()
+ let modal = $('.modal-dialog');
+ if (modalDialog.left < mobileHead.left) {
+ let leftOffset = mobileHead.left - modalDialog.left;
+ modal.style.left = leftOffset + 'px';
+ modal.style.top = (window.innerHeight/3) + 'px';
+ }
+};
\ No newline at end of file
From 87c65e4beab98b9660fd0a8058a24ca3f050c025 Mon Sep 17 00:00:00 2001
From: Rishab <33950743+rishabjasrotia@users.noreply.github.com>
Date: Wed, 22 Nov 2023 06:20:02 +0000
Subject: [PATCH 07/13] #204 - Fix issue due to Signature URL validation
---
microfrontends/SignDocuments/package-lock.json | 9 +++++++++
microfrontends/SignDocuments/package.json | 1 +
.../SignDocuments/src/Component/PdfRequestFiles.js | 7 ++++---
.../SignDocuments/src/Component/SignYourselfPdf.js | 6 +++---
.../SignDocuments/src/Component/recipientSignPdf.js | 7 ++++---
microfrontends/SignDocuments/src/utils/Utils.js | 6 ++++++
6 files changed, 27 insertions(+), 9 deletions(-)
diff --git a/microfrontends/SignDocuments/package-lock.json b/microfrontends/SignDocuments/package-lock.json
index 30f707e44..d087684f9 100644
--- a/microfrontends/SignDocuments/package-lock.json
+++ b/microfrontends/SignDocuments/package-lock.json
@@ -36,6 +36,7 @@
"react-scrollbars-custom": "^4.1.1",
"react-signature-canvas": "^1.0.6",
"reactour": "^1.19.1",
+ "validator": "^13.11.0",
"web-vitals": "^2.1.4"
}
},
@@ -20502,6 +20503,14 @@
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
},
+ "node_modules/validator": {
+ "version": "13.11.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz",
+ "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
diff --git a/microfrontends/SignDocuments/package.json b/microfrontends/SignDocuments/package.json
index 97970e988..8389bf007 100644
--- a/microfrontends/SignDocuments/package.json
+++ b/microfrontends/SignDocuments/package.json
@@ -32,6 +32,7 @@
"react-scrollbars-custom": "^4.1.1",
"react-signature-canvas": "^1.0.6",
"reactour": "^1.19.1",
+ "validator": "^13.11.0",
"web-vitals": "^2.1.4"
},
"scripts": {
diff --git a/microfrontends/SignDocuments/src/Component/PdfRequestFiles.js b/microfrontends/SignDocuments/src/Component/PdfRequestFiles.js
index bfcfd7cb3..214999207 100644
--- a/microfrontends/SignDocuments/src/Component/PdfRequestFiles.js
+++ b/microfrontends/SignDocuments/src/Component/PdfRequestFiles.js
@@ -14,7 +14,8 @@ import RenderAllPdfPage from "./component/renderAllPdfPage";
import {
contractDocument,
getBase64FromIMG,
- getBase64FromUrl
+ getBase64FromUrl,
+ urlValidator
} from "../utils/Utils";
import Loader from "./component/loader";
import HandleError from "./component/HandleError";
@@ -346,7 +347,7 @@ function PdfRequestFiles() {
imgUrlList.map(async (data) => {
//cheking signUrl is defau;t signature url of custom url
let ImgUrl = data.SignUrl;
- const checkUrl = ImgUrl.includes("https:");
+ const checkUrl = urlValidator(ImgUrl);
//if default signature url then convert it in base 64
if (checkUrl) {
@@ -434,7 +435,7 @@ function PdfRequestFiles() {
imgUrlList.map(async (url) => {
let signUrl = url.SignUrl;
- const checkUrl = url.SignUrl.includes("https:");
+ const checkUrl = urlValidator(signUrl);
if (checkUrl) {
signUrl = signUrl + "?get";
}
diff --git a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
index 2b5eebdc8..9044b38d9 100644
--- a/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
+++ b/microfrontends/SignDocuments/src/Component/SignYourselfPdf.js
@@ -24,7 +24,7 @@ import HandleError from "./component/HandleError";
import Nodata from "./component/Nodata";
import Header from "./component/header";
import RenderPdf from "./component/renderPdf";
-import { contractUsers, contactBook } from "../utils/Utils";
+import { contractUsers, contactBook, urlValidator } from "../utils/Utils";
//For signYourself inProgress section signer can add sign and complete doc sign.
function SignYourSelf() {
const [pdfDetails, setPdfDetails] = useState([]);
@@ -444,7 +444,7 @@ function SignYourSelf() {
imgUrlList.map(async (data) => {
let ImgUrl = data.SignUrl;
//cheking signUrl is defau;t signature url of custom url
- const checkUrl = ImgUrl.includes("https:");
+ const checkUrl = urlValidator(ImgUrl);
//if default signature url then convert it in base 64
if (checkUrl) {
@@ -524,7 +524,7 @@ function SignYourSelf() {
imgUrlList.map(async (url) => {
let signUrl = url.SignUrl;
- const checkUrl = url.SignUrl.includes("https:");
+ const checkUrl = urlValidator(signUrl);
if (checkUrl) {
signUrl = signUrl + "?get";
}
diff --git a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
index 0b9a106c9..840db9409 100644
--- a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
+++ b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
@@ -16,7 +16,8 @@ import {
getBase64FromIMG,
contractUsers,
contactBook,
- contractDocument
+ contractDocument,
+ urlValidator
} from "../utils/Utils";
import Tour from "reactour";
import Signedby from "./component/signedby";
@@ -445,7 +446,7 @@ function EmbedPdfImage() {
imgUrlList.map(async (data) => {
//cheking signUrl is defau;t signature url of custom url
let ImgUrl = data.SignUrl;
- const checkUrl = ImgUrl.includes("https:");
+ const checkUrl = urlValidator(ImgUrl);
//if default signature url then convert it in base 64
if (checkUrl) {
@@ -523,7 +524,7 @@ function EmbedPdfImage() {
const images = await Promise.all(
imgUrlList.map(async (url) => {
let signUrl = url.SignUrl;
- const checkUrl = url.SignUrl.includes("https:");
+ const checkUrl = urlValidator(signUrl);
if (checkUrl) {
signUrl = signUrl + "?get";
}
diff --git a/microfrontends/SignDocuments/src/utils/Utils.js b/microfrontends/SignDocuments/src/utils/Utils.js
index ecf6d0359..0413c7d87 100644
--- a/microfrontends/SignDocuments/src/utils/Utils.js
+++ b/microfrontends/SignDocuments/src/utils/Utils.js
@@ -1,4 +1,5 @@
import axios from "axios";
+import validator from 'validator';
export async function getBase64FromUrl(url) {
const data = await fetch(url);
@@ -299,3 +300,8 @@ export const contactBook = async (objectId) => {
});
return result;
};
+
+// function for validating URLs
+export function urlValidator(url) {
+ return validator.isURL(url);
+};
\ No newline at end of file
From 1b3508a9ef34ce454e3637201cf2c9d2a340e39c Mon Sep 17 00:00:00 2001
From: rishabjasrotia
Date: Wed, 22 Nov 2023 18:57:18 +0530
Subject: [PATCH 08/13] Replace npm package with manual valiadation
---
microfrontends/SignDocuments/package-lock.json | 9 ---------
microfrontends/SignDocuments/package.json | 1 -
microfrontends/SignDocuments/src/utils/Utils.js | 8 ++++++--
3 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/microfrontends/SignDocuments/package-lock.json b/microfrontends/SignDocuments/package-lock.json
index d087684f9..30f707e44 100644
--- a/microfrontends/SignDocuments/package-lock.json
+++ b/microfrontends/SignDocuments/package-lock.json
@@ -36,7 +36,6 @@
"react-scrollbars-custom": "^4.1.1",
"react-signature-canvas": "^1.0.6",
"reactour": "^1.19.1",
- "validator": "^13.11.0",
"web-vitals": "^2.1.4"
}
},
@@ -20503,14 +20502,6 @@
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
},
- "node_modules/validator": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz",
- "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==",
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
diff --git a/microfrontends/SignDocuments/package.json b/microfrontends/SignDocuments/package.json
index 8389bf007..97970e988 100644
--- a/microfrontends/SignDocuments/package.json
+++ b/microfrontends/SignDocuments/package.json
@@ -32,7 +32,6 @@
"react-scrollbars-custom": "^4.1.1",
"react-signature-canvas": "^1.0.6",
"reactour": "^1.19.1",
- "validator": "^13.11.0",
"web-vitals": "^2.1.4"
},
"scripts": {
diff --git a/microfrontends/SignDocuments/src/utils/Utils.js b/microfrontends/SignDocuments/src/utils/Utils.js
index 0413c7d87..f7d42f214 100644
--- a/microfrontends/SignDocuments/src/utils/Utils.js
+++ b/microfrontends/SignDocuments/src/utils/Utils.js
@@ -1,5 +1,4 @@
import axios from "axios";
-import validator from 'validator';
export async function getBase64FromUrl(url) {
const data = await fetch(url);
@@ -303,5 +302,10 @@ export const contactBook = async (objectId) => {
// function for validating URLs
export function urlValidator(url) {
- return validator.isURL(url);
+ try {
+ const newUrl = new URL(url);
+ return newUrl.protocol === 'http:' || newUrl.protocol === 'https:';
+ } catch (err) {
+ return false;
+ }
};
\ No newline at end of file
From 5c9bfbbdfe26014a728fd41c31c0fcb0759fceef Mon Sep 17 00:00:00 2001
From: prafull-opensignlabs
Date: Thu, 23 Nov 2023 13:36:35 +0530
Subject: [PATCH 09/13] fix: signature slighty move from top and bottom
---
.../customSignPdf/pdfkitAddPlaceholder.min.js | 44 +++++++++----------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/customSignPdf/pdfkitAddPlaceholder.min.js b/apps/OpenSignServer/cloud/parsefunction/pdf/customSignPdf/pdfkitAddPlaceholder.min.js
index 21a62665e..261553ff8 100644
--- a/apps/OpenSignServer/cloud/parsefunction/pdf/customSignPdf/pdfkitAddPlaceholder.min.js
+++ b/apps/OpenSignServer/cloud/parsefunction/pdf/customSignPdf/pdfkitAddPlaceholder.min.js
@@ -1,28 +1,28 @@
-import{DEFAULT_BYTE_RANGE_PLACEHOLDER,DEFAULT_SIGNATURE_LENGTH,SUBFILTER_ADOBE_PKCS7_DETACHED}from"./const.min.js";import PDFKitReferenceMock from"./PDFKitReferenceMock.min.js";import PNG from"png-js";import zlib from"zlib";import fs from"node:fs";const specialCharacters=["á","Á","é","É","í","Í","ó","Ó","ö","Ö","ő","Ő","ú","Ú","ű","Ű"],MARKERS=[65472,65473,65474,65475,65477,65478,65479,65480,65481,65482,65483,65484,65485,65486,65487],COLOR_SPACE_MAP={1:"DeviceGray",3:"DeviceRGB",4:"DeviceCMYK"};function getImage(e,t){let n;if(255===e[0]&&216===e[1])n=getJpgImage(t,e);else{if(137!==e[0]||"PNG"!==e.toString("ascii",1,4))throw new Error("Unknown image format.");n=getPngImage(t,e)}return n}function getAnnotationApparance(e,t,n){return e.ref({CropBox:[0,0,197,70],Type:"XObject",FormType:1,BBox:[0,0,197,70],Resources:`<>
/Font <<
/f1 ${n.index} 0 R
>>
->>`,MediaBox:[0,0,197,70],Subtype:"Form"},null,getStream(t.index))}const getStream=e=>getConvertedText(`
- 1.0 1.0 1.0 rg
- 0.0 0.0 0.0 RG
- q
- q
- 200 0 0 50 0 10 cm
- /Img${e} Do
- Q
- 0 0 0 rg
- BT
- 0 Tr
- /f1 10.0 Tf
- 1.4 0 0 1 20 45.97412 Tm
- ET
- BT
- 0 Tr
- /f1 10.0 Tf
- 1.4 0 0 1 20 33.56006 Tm
- ET
- Q`),getFont=(e,t)=>e.ref({Type:"Font",BaseFont:t,Encoding:"WinAnsiEncoding",Subtype:"Type1"}),getJpgImage=(e,t)=>{if(65496!==t.readUInt16BE(0))throw"SOI not found in JPEG";let n=2,a;for(;n{var t=new PNG(t),n=t.hasAlphaChannel,a={Type:"XObject",Subtype:"Image",BitsPerComponent:n?8:t.bits,Width:t.width,Height:t.height,Filter:"FlateDecode"};if(n||(r=e.ref({Predictor:15,Colors:t.colors,BitsPerComponent:t.bits,Columns:t.width}),a.DecodeParms=r),0===t.palette.length?a.ColorSpace=t.colorSpace:(r=e.ref({stream:new Buffer(t.palette)}),a.ColorSpace=["Indexed","DeviceRGB",t.palette.length/3-1,r]),null!=t.transparency.grayscale){var r=t.transparency.grayscale;a.Mask=[r,r]}else if(t.transparency.rgb){var o,r=t.transparency["rgb"],i=[];for(o of r)i.push(o,o);a.Mask=i}else t.transparency.indexed?loadIndexedAlphaChannel(t):n&&(splitAlphaChannel(t),r=getSmask(e,t),a.Mask=r);return e.ref(a,null,t.imgData)},loadIndexedAlphaChannel=e=>{const o=e.transparency.indexed;return e.decodePixels(n=>{var a=new Buffer(e.width*e.height);let r=0;for(let e=0,t=n.length;e{d.decodePixels(t=>{let e,n;var a=d.colors,r=d.width*d.height,o=new Buffer(r*a),i=new Buffer(r);let l=n=e=0;for(var g=t.length,c=16===d.bits?1:0;l{let n;return console.log("image.hasAlphaChannel ",t.hasAlphaChannel),t.hasAlphaChannel&&(console.log("image.alphaChannel ",t.alphaChannel),n=e.ref({Type:"XObject",Subtype:"Image",Height:t.height,Width:t.width,BitsPerComponent:8,Filter:"FlateDecode",ColorSpace:"DeviceGray",Decode:[0,1],stream:t.alphaChannel})),n},getConvertedText=e=>e.split("").map(e=>specialCharacters.includes(e)?getOctalCodeFromCharacter(e):e).join(""),getOctalCodeFromCharacter=e=>"\\"+e.charCodeAt(0).toString(8),pdfkitAddPlaceholder=({pdf:e,pdfBuffer:a,reason:r,contactInfo:t="emailfromp1289@gmail.com",name:n="Name from p12",location:o="Location from p12",signatureLength:i=DEFAULT_SIGNATURE_LENGTH,byteRangePlaceholder:l=DEFAULT_BYTE_RANGE_PLACEHOLDER,subFilter:g=SUBFILTER_ADOBE_PKCS7_DETACHED,sign:c})=>{var d=getFont(e,"Helvetica"),s=getFont(e,"ZapfDingbats"),f=getFont(e,"Helvetica"),p=c.Base64,p=getAnnotationApparance(e,getImage(Buffer.from(p,"base64"),e),f),f=e.ref({Type:"Sig",Filter:"Adobe.PPKLite",SubFilter:g,ByteRange:[0,l,l,l],Contents:Buffer.from(String.fromCharCode(0).repeat(i)),Reason:new String(r),M:new Date,ContactInfo:new String(t),Name:new String(n),Location:new String(o)}),h=a.lastIndexOf("/Type /AcroForm"),g=-1!==h;let m=[],C;if(g){let e=h;var S=h-10;let t="",n=11;for(n;n<22;n+=1){var A=a.slice(h-n,S).toString();if("\n"===A[0])break;t=A,e=h-n}l=a.slice(e),i=l.slice(0,l.indexOf("endobj")).toString(),r=(C=parseInt(t),i.slice(i.indexOf("/Fields [")+9,i.indexOf("]")));m=r.split(" ").filter((e,t)=>t%3==0).map(e=>new PDFKitReferenceMock(e))}m.length;t=c.Left,n=c.Bottom,o=t+c.Width,l=n+c.Height,i=e.ref({Type:"Annot",Subtype:"Widget",FT:"Sig",Rect:[t,n,o,l],V:f,T:new String("Signature"+(m.length+1)),F:4,P:e.page.dictionary,AP:`<>`,DA:new String("/Helvetica 0 Tf 0 g")});e.page.dictionary.data.Annots=[i];let T;return T=g?e.ref({Type:"AcroForm",SigFlags:3,Fields:[...m,i],DR:`<>`,MediaBox:[0,10,200,60],Subtype:"Form"},null,getStream(t.index))}const getStream=e=>getConvertedText(`
+ 1.0 1.0 1.0 rg
+ 0.0 0.0 0.0 RG
+ q
+ q
+ 200 0 0 50 0 10 cm
+ /Img${e} Do
+ Q
+ 0 0 0 rg
+ BT
+ 0 Tr
+ /f1 10.0 Tf
+ 1.4 0 0 1 20 45.97412 Tm
+ ET
+ BT
+ 0 Tr
+ /f1 10.0 Tf
+ 1.4 0 0 1 20 33.56006 Tm
+ ET
+ Q`),getFont=(e,t)=>e.ref({Type:"Font",BaseFont:t,Encoding:"WinAnsiEncoding",Subtype:"Type1"}),getJpgImage=(e,t)=>{if(65496!==t.readUInt16BE(0))throw"SOI not found in JPEG";let n=2,a;for(;n{var t=new PNG(t),n=t.hasAlphaChannel,a={Type:"XObject",Subtype:"Image",BitsPerComponent:n?8:t.bits,Width:t.width,Height:t.height,Filter:"FlateDecode"};if(n||(r=e.ref({Predictor:15,Colors:t.colors,BitsPerComponent:t.bits,Columns:t.width}),a.DecodeParms=r),0===t.palette.length?a.ColorSpace=t.colorSpace:(r=e.ref({stream:new Buffer(t.palette)}),a.ColorSpace=["Indexed","DeviceRGB",t.palette.length/3-1,r]),null!=t.transparency.grayscale){var r=t.transparency.grayscale;a.Mask=[r,r]}else if(t.transparency.rgb){var o,r=t.transparency["rgb"],i=[];for(o of r)i.push(o,o);a.Mask=i}else t.transparency.indexed?loadIndexedAlphaChannel(t):n&&(splitAlphaChannel(t),r=getSmask(e,t),a.Mask=r);return e.ref(a,null,t.imgData)},loadIndexedAlphaChannel=e=>{const o=e.transparency.indexed;return e.decodePixels(n=>{var a=new Buffer(e.width*e.height);let r=0;for(let e=0,t=n.length;e{d.decodePixels(t=>{let e,n;var a=d.colors,r=d.width*d.height,o=new Buffer(r*a),i=new Buffer(r);let l=n=e=0;for(var c=t.length,g=16===d.bits?1:0;l{let n;return console.log("image.hasAlphaChannel ",t.hasAlphaChannel),t.hasAlphaChannel&&(console.log("image.alphaChannel ",t.alphaChannel),n=e.ref({Type:"XObject",Subtype:"Image",Height:t.height,Width:t.width,BitsPerComponent:8,Filter:"FlateDecode",ColorSpace:"DeviceGray",Decode:[0,1],stream:t.alphaChannel})),n},getConvertedText=e=>e.split("").map(e=>specialCharacters.includes(e)?getOctalCodeFromCharacter(e):e).join(""),getOctalCodeFromCharacter=e=>"\\"+e.charCodeAt(0).toString(8),pdfkitAddPlaceholder=({pdf:e,pdfBuffer:a,reason:r,contactInfo:t="emailfromp1289@gmail.com",name:n="Name from p12",location:o="Location from p12",signatureLength:i=DEFAULT_SIGNATURE_LENGTH,byteRangePlaceholder:l=DEFAULT_BYTE_RANGE_PLACEHOLDER,subFilter:c=SUBFILTER_ADOBE_PKCS7_DETACHED,sign:g})=>{var d=getFont(e,"Helvetica"),s=getFont(e,"ZapfDingbats"),p=getFont(e,"Helvetica"),f=g.Base64,f=getAnnotationApparance(e,getImage(Buffer.from(f,"base64"),e),p,g),p=e.ref({Type:"Sig",Filter:"Adobe.PPKLite",SubFilter:c,ByteRange:[0,l,l,l],Contents:Buffer.from(String.fromCharCode(0).repeat(i)),Reason:new String(r),M:new Date,ContactInfo:new String(t),Name:new String(n),Location:new String(o)}),h=a.lastIndexOf("/Type /AcroForm"),c=-1!==h;let m=[],C;if(c){let e=h;var S=h-10;let t="",n=11;for(n;n<22;n+=1){var A=a.slice(h-n,S).toString();if("\n"===A[0])break;t=A,e=h-n}l=a.slice(e),i=l.slice(0,l.indexOf("endobj")).toString(),r=(C=parseInt(t),i.slice(i.indexOf("/Fields [")+9,i.indexOf("]")));m=r.split(" ").filter((e,t)=>t%3==0).map(e=>new PDFKitReferenceMock(e))}t=g.Left,n=g.Bottom,o=t+g.Width,l=n+g.Height,i=e.ref({Type:"Annot",Subtype:"Widget",FT:"Sig",Rect:[t,n,o,l],V:p,T:new String("Signature"+(m.length+1)),F:4,P:e.page.dictionary,AP:`<>`,DA:new String("/Helvetica 0 Tf 0 g")});e.page.dictionary.data.Annots=[i];let T;return T=c?e.ref({Type:"AcroForm",SigFlags:3,Fields:[...m,i],DR:`<>
->>`},C):e.ref({Type:"AcroForm",SigFlags:3,Fields:[...m,i]}),{signature:f,form:e._root.data.AcroForm=T,widget:i}};export default pdfkitAddPlaceholder;
\ No newline at end of file
+>>`},C):e.ref({Type:"AcroForm",SigFlags:3,Fields:[...m,i]}),{signature:p,form:e._root.data.AcroForm=T,widget:i}};export default pdfkitAddPlaceholder;
\ No newline at end of file
From 01e19632a9b5cac418b5849cbd265afa0f52e2c5 Mon Sep 17 00:00:00 2001
From: Amol
Date: Thu, 23 Nov 2023 17:49:43 +0530
Subject: [PATCH 10/13] fix: syntax issue
---
microfrontends/SignDocuments/src/Component/recipientSignPdf.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
index 09a9ece88..801a30a54 100644
--- a/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
+++ b/microfrontends/SignDocuments/src/Component/recipientSignPdf.js
@@ -15,7 +15,7 @@ import {
getBase64FromUrl,
getBase64FromIMG,
contactBookName,
- convertPNGtoJPEG
+ convertPNGtoJPEG,
contractUsers,
contactBook,
contractDocument,
From 6c579178c0e262c8e6eb273ada4921e4f1cb9a1d Mon Sep 17 00:00:00 2001
From: Amol
Date: Thu, 23 Nov 2023 17:51:10 +0530
Subject: [PATCH 11/13] chore: syntax issue
---
microfrontends/SignDocuments/src/utils/Utils.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/microfrontends/SignDocuments/src/utils/Utils.js b/microfrontends/SignDocuments/src/utils/Utils.js
index ecbc34304..53212f8ae 100644
--- a/microfrontends/SignDocuments/src/utils/Utils.js
+++ b/microfrontends/SignDocuments/src/utils/Utils.js
@@ -330,6 +330,7 @@ export function urlValidator(url) {
return newUrl.protocol === 'http:' || newUrl.protocol === 'https:';
} catch (err) {
return false;
+ }
export const modalAlign = () => {
let modalDialog = $('.modal-dialog').getBoundingClientRect();
let mobileHead = $('.mobileHead').getBoundingClientRect()
@@ -339,4 +340,4 @@ export const modalAlign = () => {
modal.style.left = leftOffset + 'px';
modal.style.top = (window.innerHeight/3) + 'px';
}
-};
\ No newline at end of file
+};
From 8619021f304d07726e5ecf5c8469bcbb61ed4fdb Mon Sep 17 00:00:00 2001
From: Amol
Date: Thu, 23 Nov 2023 17:57:00 +0530
Subject: [PATCH 12/13] chore: syntax issue
---
microfrontends/SignDocuments/src/utils/Utils.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/microfrontends/SignDocuments/src/utils/Utils.js b/microfrontends/SignDocuments/src/utils/Utils.js
index 53212f8ae..40365daa3 100644
--- a/microfrontends/SignDocuments/src/utils/Utils.js
+++ b/microfrontends/SignDocuments/src/utils/Utils.js
@@ -331,7 +331,7 @@ export function urlValidator(url) {
} catch (err) {
return false;
}
-export const modalAlign = () => {
+export function modalAlign() {
let modalDialog = $('.modal-dialog').getBoundingClientRect();
let mobileHead = $('.mobileHead').getBoundingClientRect()
let modal = $('.modal-dialog');
From 23ae72738d3e1dba31071fa8b2b0e99a23b7febc Mon Sep 17 00:00:00 2001
From: Amol
Date: Thu, 23 Nov 2023 18:07:22 +0530
Subject: [PATCH 13/13] chore: syntax issue
---
microfrontends/SignDocuments/src/utils/Utils.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/microfrontends/SignDocuments/src/utils/Utils.js b/microfrontends/SignDocuments/src/utils/Utils.js
index 40365daa3..a78fc3e94 100644
--- a/microfrontends/SignDocuments/src/utils/Utils.js
+++ b/microfrontends/SignDocuments/src/utils/Utils.js
@@ -331,6 +331,7 @@ export function urlValidator(url) {
} catch (err) {
return false;
}
+}
export function modalAlign() {
let modalDialog = $('.modal-dialog').getBoundingClientRect();
let mobileHead = $('.mobileHead').getBoundingClientRect()