From a18733ad791a74ad8de0f972a3f0e6001a55eebe Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Fri, 3 May 2024 18:08:53 +0530 Subject: [PATCH] fix: show correct document creation date on certificate --- apps/OpenSign/src/pages/Form.js | 134 +++++++++--------- .../cloud/parsefunction/DocumentBeforesave.js | 4 + .../parsefunction/pdf/GenerateCertificate.js | 10 +- apps/OpenSignServer/index.js | 3 +- 4 files changed, 81 insertions(+), 70 deletions(-) diff --git a/apps/OpenSign/src/pages/Form.js b/apps/OpenSign/src/pages/Form.js index 6af4107ac..fd3e521f0 100644 --- a/apps/OpenSign/src/pages/Form.js +++ b/apps/OpenSign/src/pages/Form.js @@ -109,69 +109,69 @@ const Forms = (props) => { } } } else { - if (isEnableSubscription) { - const isImage = files?.[0]?.type.includes("image/"); - if (isImage) { - const image = await toDataUrl(files[0]); - const pdfDoc = await PDFDocument.create(); - let embedImg; - if (files?.[0]?.type === "image/png") { - embedImg = await pdfDoc.embedPng(image); - } else { - embedImg = await pdfDoc.embedJpg(image); - } - - // Get image dimensions - const imageWidth = embedImg.width; - const imageHeight = embedImg.height; - const page = pdfDoc.addPage([imageWidth, imageHeight]); - page.drawImage(embedImg, { - x: 0, - y: 0, - width: imageWidth, - height: imageHeight - }); - const getFile = await pdfDoc.save({ - useObjectStreams: false - }); - setfileload(true); - const fileName = files[0].name; - const size = files[0].size; - const name = sanitizeFileName(fileName); - const pdfName = `${name?.split(".")[0]}.pdf`; - const parseFile = new Parse.File( - pdfName, - [...getFile], - "application/pdf" - ); - - try { - const response = await parseFile.save({ - progress: (progressValue, loaded, total, { type }) => { - if (type === "upload" && progressValue !== null) { - const percentCompleted = Math.round( - (loaded * 100) / total - ); - setpercentage(percentCompleted); - } - } - }); - // The response object will contain information about the uploaded file - // You can access the URL of the uploaded file using response.url() - setFileUpload(response.url()); - setfileload(false); - if (response.url()) { - const tenantId = localStorage.getItem("TenantId"); - SaveFileSize(size, response.url(), tenantId); - return response.url(); - } - } catch (error) { - e.target.value = ""; - setfileload(false); - setpercentage(0); - console.error("Error uploading file:", error); - } + const isImage = files?.[0]?.type.includes("image/"); + if (isImage) { + const image = await toDataUrl(files[0]); + const pdfDoc = await PDFDocument.create(); + let embedImg; + if (files?.[0]?.type === "image/png") { + embedImg = await pdfDoc.embedPng(image); } else { + embedImg = await pdfDoc.embedJpg(image); + } + + // Get image dimensions + const imageWidth = embedImg.width; + const imageHeight = embedImg.height; + const page = pdfDoc.addPage([imageWidth, imageHeight]); + page.drawImage(embedImg, { + x: 0, + y: 0, + width: imageWidth, + height: imageHeight + }); + const getFile = await pdfDoc.save({ + useObjectStreams: false + }); + setfileload(true); + const fileName = files[0].name; + const size = files[0].size; + const name = sanitizeFileName(fileName); + const pdfName = `${name?.split(".")[0]}.pdf`; + const parseFile = new Parse.File( + pdfName, + [...getFile], + "application/pdf" + ); + + try { + const response = await parseFile.save({ + progress: (progressValue, loaded, total, { type }) => { + if (type === "upload" && progressValue !== null) { + const percentCompleted = Math.round( + (loaded * 100) / total + ); + setpercentage(percentCompleted); + } + } + }); + // The response object will contain information about the uploaded file + // You can access the URL of the uploaded file using response.url() + setFileUpload(response.url()); + setfileload(false); + if (response.url()) { + const tenantId = localStorage.getItem("TenantId"); + SaveFileSize(size, response.url(), tenantId); + return response.url(); + } + } catch (error) { + e.target.value = ""; + setfileload(false); + setpercentage(0); + console.error("Error uploading file:", error); + } + } else { + if (isEnableSubscription) { try { setfileload(true); const url = "http://tools.opensignlabs.com/docxtopdf"; @@ -426,7 +426,10 @@ const Forms = (props) => { )}
{fileupload.length > 0 ? (
@@ -454,11 +457,10 @@ const Forms = (props) => { type="file" className="bg-white px-2 py-1.5 w-full border-[1px] border-gray-300 rounded focus:outline-none text-xs" onChange={(e) => handleFileInput(e)} - // accept="application/pdf" accept={ isEnableSubscription - ? "application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/png,image/jpeg" - : "application/pdf" + ? "application/pdf,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/png,image/jpeg" + : "application/pdf,image/png,image/jpeg" } required /> diff --git a/apps/OpenSignServer/cloud/parsefunction/DocumentBeforesave.js b/apps/OpenSignServer/cloud/parsefunction/DocumentBeforesave.js index 0effff5ec..e7f251ca4 100644 --- a/apps/OpenSignServer/cloud/parsefunction/DocumentBeforesave.js +++ b/apps/OpenSignServer/cloud/parsefunction/DocumentBeforesave.js @@ -25,6 +25,10 @@ async function DocumentBeforesave(request) { } catch (error) { console.log('Error updating document count in contracts_users: ' + error.message); } + if (document?.get('Signers') && document.get('Signers').length > 0) { + document.set('DocSentAt', new Date()); + document.save(null, { useMasterKey: true }); + } } } catch (err) { console.log('err in document beforesave', err.message); diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/GenerateCertificate.js b/apps/OpenSignServer/cloud/parsefunction/pdf/GenerateCertificate.js index c3ce72ac9..0f3081c5e 100644 --- a/apps/OpenSignServer/cloud/parsefunction/pdf/GenerateCertificate.js +++ b/apps/OpenSignServer/cloud/parsefunction/pdf/GenerateCertificate.js @@ -25,6 +25,7 @@ export default async function GenerateCertificate(docDetails) { const generatedOn = 'Generated On ' + generatedUTCTime; const OriginIp = docDetails?.OriginIp || ''; const company = docDetails?.ExtUserPtr?.Company || ''; + const createdAt = docDetails?.DocSentAt?.iso || docDetails.createdAt; const auditTrail = docDetails.AuditTrail?.length > 1 ? docDetails.AuditTrail.map(x => { @@ -33,7 +34,7 @@ export default async function GenerateCertificate(docDetails) { ...data, ipAddress: x.ipAddress, SignedOn: x?.SignedOn || generatedUTCTime, - ViewedOn: x?.ViewedOn || generatedUTCTime, + ViewedOn: x?.ViewedOn || x?.SignedOn || generatedUTCTime, Signature: x?.Signature || '', }; }) @@ -42,7 +43,10 @@ export default async function GenerateCertificate(docDetails) { ...docDetails.ExtUserPtr, ipAddress: docDetails?.AuditTrail[0].ipAddress, SignedOn: docDetails?.AuditTrail[0]?.SignedOn || generatedUTCTime, - ViewedOn: docDetails?.AuditTrail[0]?.ViewedOn || generatedUTCTime, + ViewedOn: + docDetails?.AuditTrail[0]?.ViewedOn || + docDetails?.AuditTrail[0]?.SignedOn || + generatedUTCTime, Signature: docDetails?.AuditTrail[0]?.Signature || '', }, ]; @@ -151,7 +155,7 @@ export default async function GenerateCertificate(docDetails) { color: textKeyColor, }); - page.drawText(`${new Date(docDetails.createdAt).toUTCString()}`, { + page.drawText(`${new Date(createdAt).toUTCString()}`, { x: 105, y: 625, size: text, diff --git a/apps/OpenSignServer/index.js b/apps/OpenSignServer/index.js index e06f2e40e..2d51c739f 100644 --- a/apps/OpenSignServer/index.js +++ b/apps/OpenSignServer/index.js @@ -166,6 +166,7 @@ app.use(cors()); app.use(express.json({ limit: '50mb' })); app.use(express.urlencoded({ limit: '50mb', extended: true })); app.use(function (req, res, next) { + console.log('ip', getUserIP(req)); req.headers['x-real-ip'] = getUserIP(req); next(); }); @@ -225,7 +226,7 @@ if (!process.env.TESTING) { // Set the Keep-Alive and headers timeout to 100 seconds httpServer.keepAliveTimeout = 100000; // in milliseconds httpServer.headersTimeout = 100000; // in milliseconds - httpServer.listen({ port: port, host: '0.0.0.0' }, function () { + httpServer.listen(port, '0.0.0.0', function () { console.log('parse-server-example running on port ' + port + '.'); const isWindows = process.platform === 'win32'; // console.log('isWindows', isWindows);