From c6cdb116e3df9375eb96c908f735659e80e373ab Mon Sep 17 00:00:00 2001 From: Timur Ercan Date: Thu, 2 Mar 2023 17:54:19 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20=F0=9F=9A=9A=20rename=20signDocu?= =?UTF-8?q?ment=20to=20addDigitalSignature,=20sign=20only=20when=20signatu?= =?UTF-8?q?res=20exist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/pages/api/documents/[id].ts | 19 +++++++++++++++---- apps/web/pages/api/test-sign/[id].ts | 6 ++++-- ...signDocument.ts => addDigitalSignature.ts} | 4 +++- 3 files changed, 22 insertions(+), 7 deletions(-) rename packages/signing/{signDocument.ts => addDigitalSignature.ts} (96%) diff --git a/apps/web/pages/api/documents/[id].ts b/apps/web/pages/api/documents/[id].ts index 94cf67c5c..48284a6f4 100644 --- a/apps/web/pages/api/documents/[id].ts +++ b/apps/web/pages/api/documents/[id].ts @@ -7,7 +7,7 @@ import prisma from "@documenso/prisma"; import { NextApiRequest, NextApiResponse } from "next"; import { Document as PrismaDocument } from "@prisma/client"; import { getDocument } from "@documenso/lib/query"; -import { signDocument } from "@documenso/signing/signDocument"; +import { addDigitalSignature } from "@documenso/signing/addDigitalSignature"; async function getHandler(req: NextApiRequest, res: NextApiResponse) { const user = await getUserFromToken(req, res); @@ -25,9 +25,20 @@ async function getHandler(req: NextApiRequest, res: NextApiResponse) { if (!document) res.status(404).end(`No document with id ${documentId} found.`); - const signedDocumentAsBase64 = await signDocument( - document.document.toString() - ); + const signaturesCount = await prisma.signature.count({ + where: { + Field: { + documentId: document.id, + }, + }, + }); + + let signedDocumentAsBase64 = document.document; + + // No need to add a signature, if no one signed yet. + if (signaturesCount > 0) { + signedDocumentAsBase64 = await addDigitalSignature(document.document); + } const buffer: Buffer = Buffer.from(signedDocumentAsBase64, "base64"); res.setHeader("Content-Type", "application/pdf"); diff --git a/apps/web/pages/api/test-sign/[id].ts b/apps/web/pages/api/test-sign/[id].ts index 1a41838a1..7c38f1a24 100644 --- a/apps/web/pages/api/test-sign/[id].ts +++ b/apps/web/pages/api/test-sign/[id].ts @@ -7,12 +7,14 @@ import prisma from "@documenso/prisma"; import { NextApiRequest, NextApiResponse } from "next"; import { Document as PrismaDocument } from "@prisma/client"; import { getDocument } from "@documenso/lib/query"; -import { signDocument } from "@documenso/signing/signDocument"; +import { addDigitalSignature } from "@documenso/signing/addDigitalSignature"; async function getHandler(req: NextApiRequest, res: NextApiResponse) { const documentId = req.query.id || 1; const document: PrismaDocument = await getDocument(+documentId, req, res); - const signedDocumentAsBase64 = await signDocument(document.document.toString()); + const signedDocumentAsBase64 = await addDigitalSignature( + document.document.toString() + ); const buffer: Buffer = Buffer.from(signedDocumentAsBase64, "base64"); res.setHeader("Content-Type", "application/pdf"); res.setHeader( diff --git a/packages/signing/signDocument.ts b/packages/signing/addDigitalSignature.ts similarity index 96% rename from packages/signing/signDocument.ts rename to packages/signing/addDigitalSignature.ts index fe9448b9c..e37401202 100644 --- a/packages/signing/signDocument.ts +++ b/packages/signing/addDigitalSignature.ts @@ -8,7 +8,9 @@ import { PDFString, } from "pdf-lib"; -export const signDocument = async (documentAsBase64: string): Promise => { +export const addDigitalSignature = async ( + documentAsBase64: string +): Promise => { // Custom code to add Byterange to PDF const PDFArrayCustom = require("./PDFArrayCustom");