From 761f81d27ccf53613dfad64ba0384acc9a9cca8c Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Tue, 8 Oct 2024 20:09:38 +0530 Subject: [PATCH] fix: pdf is not loading when custom file storage change --- .../src/components/pdf/EmailComponent.js | 8 +- apps/OpenSign/src/constant/Utils.js | 22 ++-- apps/OpenSign/src/layout/HomeLayout.js | 22 +--- apps/OpenSign/src/pages/Form.js | 48 +++++--- apps/OpenSign/src/pages/Opensigndrive.js | 21 +--- .../OpenSign/src/primitives/DownloadPdfZip.js | 8 +- .../src/primitives/GetReportDisplay.js | 34 ++---- .../v1/routes/CreateDocumentWithTemplate.js | 4 +- .../v1/routes/createDocumentwithCoordinate.js | 21 ++-- .../v1/routes/createTemplatewithCoordinate.js | 21 ++-- .../cloud/parsefunction/DocumentAfterFind.js | 14 +-- .../cloud/parsefunction/GetTemplate.js | 4 +- .../PublicUserLinkContactToDoc.js | 2 +- .../cloud/parsefunction/TemplateAfterFind.js | 43 +++---- .../cloud/parsefunction/addFileAdapter.js | 109 +++++++++++++++--- .../cloud/parsefunction/createBatchDocs.js | 2 +- .../cloud/parsefunction/getDocument.js | 2 +- .../cloud/parsefunction/getFileAdapter.js | 31 +++-- .../cloud/parsefunction/getSignedUrl.js | 26 ++--- .../cloud/parsefunction/getUserDetails.js | 2 +- .../cloud/parsefunction/pdf/PDF.js | 6 +- .../cloud/parsefunction/reportsJson.js | 20 ++-- .../cloud/parsefunction/saveToFileAdapter.js | 21 ++-- .../parsefunction/sendMailGmailProvider.js | 3 +- .../cloud/parsefunction/sendMailv3.js | 6 +- ...> 20241004104551-fileadapterId_doccls.cjs} | 4 +- 26 files changed, 294 insertions(+), 210 deletions(-) rename apps/OpenSignServer/databases/migrations/{20241004104551-isfileadapter_doccls.cjs => 20241004104551-fileadapterId_doccls.cjs} (82%) diff --git a/apps/OpenSign/src/components/pdf/EmailComponent.js b/apps/OpenSign/src/components/pdf/EmailComponent.js index 7388a42a7..bae473ecb 100644 --- a/apps/OpenSign/src/components/pdf/EmailComponent.js +++ b/apps/OpenSign/src/components/pdf/EmailComponent.js @@ -31,14 +31,14 @@ function EmailComponent({ setIsLoading(true); let sendMail; const docId = pdfDetails?.[0]?.objectId || ""; - const isFileAdapter = pdfDetails?.[0]?.IsFileAdapter - ? pdfDetails?.[0]?.IsFileAdapter - : false; + const FileAdapterId = pdfDetails?.[0]?.FileAdapterId + ? pdfDetails?.[0]?.FileAdapterId + : ""; let presignedUrl = pdfUrl; try { const axiosRes = await axios.post( `${localStorage.getItem("baseUrl")}/functions/getsignedurl`, - { url: pdfUrl, docId: docId, isFileAdapter: isFileAdapter }, + { url: pdfUrl, docId: docId, fileAdapterId: FileAdapterId }, { headers: { "content-type": "Application/json", diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js index 3f323b40f..d58e04f2e 100644 --- a/apps/OpenSign/src/constant/Utils.js +++ b/apps/OpenSign/src/constant/Utils.js @@ -712,7 +712,7 @@ export const createDocument = async ( RemindOnceInEvery: parseInt(Doc?.RemindOnceInEvery || 5), IsEnableOTP: Doc?.IsEnableOTP || false, IsTourEnabled: Doc?.IsTourEnabled || false, - IsFileAdapter: Doc?.IsFileAdapter || false + FileAdapterId: Doc?.FileAdapterId || "" }; try { @@ -2074,7 +2074,7 @@ export const fetchUrl = async (url, pdfName) => { export const getSignedUrl = async ( pdfUrl, docId, - isFileAdapter, + fileAdapterId, templateId ) => { //use only axios here due to public template sign @@ -2083,7 +2083,7 @@ export const getSignedUrl = async ( { url: pdfUrl, docId: docId || "", - isFileAdapter: isFileAdapter, + fileAdapterId: fileAdapterId, templateId: templateId || "" }, { @@ -2103,11 +2103,11 @@ export const handleDownloadPdf = async (pdfDetails, setIsDownloading) => { const pdfUrl = pdfDetails?.[0]?.SignedUrl || pdfDetails?.[0]?.URL; setIsDownloading && setIsDownloading("pdf"); const docId = pdfDetails?.[0]?.objectId || ""; - const isFileAdapter = pdfDetails?.[0]?.IsFileAdapter - ? pdfDetails?.[0]?.IsFileAdapter - : false; + const fileAdapterId = pdfDetails?.[0]?.FileAdapterId + ? pdfDetails?.[0]?.FileAdapterId + : ""; try { - const url = await getSignedUrl(pdfUrl, docId, isFileAdapter); + const url = await getSignedUrl(pdfUrl, docId, fileAdapterId); await fetchUrl(url, pdfName); setIsDownloading && setIsDownloading(""); } catch (err) { @@ -2131,16 +2131,16 @@ export const handleToPrint = async ( event.preventDefault(); setIsDownloading("pdf"); const docId = pdfDetails?.[0]?.objectId || ""; - const isFileAdapter = pdfDetails?.[0]?.IsFileAdapter - ? pdfDetails?.[0]?.IsFileAdapter - : false; + const FileAdapterId = pdfDetails?.[0]?.FileAdapterId + ? pdfDetails?.[0]?.FileAdapterId + : ""; try { // const url = await Parse.Cloud.run("getsignedurl", { url: pdfUrl }); //`localStorage.getItem("baseUrl")` is also use in public-profile flow for public-sign //if we give this `appInfo.baseUrl` as a base url then in public-profile it will create base url of it's window.location.origin ex- opensign.me which is not base url const axiosRes = await axios.post( `${localStorage.getItem("baseUrl")}/functions/getsignedurl`, - { url: pdfUrl, docId: docId, isFileAdapter: isFileAdapter }, + { url: pdfUrl, docId: docId, fileAdapterId: FileAdapterId }, { headers: { "content-type": "Application/json", diff --git a/apps/OpenSign/src/layout/HomeLayout.js b/apps/OpenSign/src/layout/HomeLayout.js index 085784e4e..758de3fd8 100644 --- a/apps/OpenSign/src/layout/HomeLayout.js +++ b/apps/OpenSign/src/layout/HomeLayout.js @@ -224,23 +224,13 @@ const HomeLayout = () => { async function checkTourStatus() { const cloudRes = await Parse.Cloud.run("getUserDetails"); - const res = { data: cloudRes.toJSON() }; - if (res.data && res.data.TourStatus && res.data.TourStatus.length > 0) { - const tourStatus = res.data.TourStatus; - // console.log("res ", res.data.TourStatus); + if (cloudRes) { + const extUser = JSON.parse(JSON.stringify(cloudRes)); + localStorage.setItem("Extand_Class", JSON.stringify([extUser])); + const tourStatus = extUser?.TourStatus || []; setTourStatusArr(tourStatus); - const filteredtourStatus = tourStatus.filter((obj) => obj["loginTour"]); - if (filteredtourStatus.length > 0) { - const loginTour = filteredtourStatus[0]["loginTour"]; - // console.log("loginTour", loginTour); - if (loginTour) { - setIsTour(false); - } else { - setIsTour(true); - } - } else { - setIsTour(true); - } + const loginTour = tourStatus.find((obj) => obj.loginTour)?.loginTour; + setIsTour(!loginTour); } else { setIsTour(true); } diff --git a/apps/OpenSign/src/pages/Form.js b/apps/OpenSign/src/pages/Form.js index ab6e43e9c..17838b3a5 100644 --- a/apps/OpenSign/src/pages/Form.js +++ b/apps/OpenSign/src/pages/Form.js @@ -169,13 +169,16 @@ const Forms = (props) => { }); setIsDecrypting(false); setfileload(true); - if (extUserData?.TenantId?.ActiveFileAdapter) { + const fileAdapterId = + extUserData?.TenantId?.ActiveFileAdapter || ""; + if (fileAdapterId) { const base64 = await toDataUrl(pdfFile); const fileBase64 = base64.split(",").pop(); const ext = files?.[0]?.name?.split(".").pop(); const fileRes = await saveToCustomFile( fileBase64, - `${name}.${ext}` + `${name}.${ext}`, + fileAdapterId ); if (fileRes.url) { setFileUpload(fileRes.url); @@ -263,7 +266,9 @@ const Forms = (props) => { }); const size = files?.[0]?.size; const name = generatePdfName(16); - if (extUserData?.TenantId?.ActiveFileAdapter) { + const fileAdapterId = + extUserData?.TenantId?.ActiveFileAdapter || ""; + if (fileAdapterId) { const base64 = await pdfDoc.saveAsBase64({ useObjectStreams: false }); @@ -272,7 +277,8 @@ const Forms = (props) => { const ext = files?.[0]?.name?.split(".").pop(); const fileRes = await saveToCustomFile( fileBase64, - `${name}.${ext}` + `${name}.${ext}`, + fileAdapterId ); if (fileRes.url) { setFileUpload(fileRes.url); @@ -373,11 +379,12 @@ const Forms = (props) => { } }; - const saveToCustomFile = async (base64, filname) => { + const saveToCustomFile = async (base64, filename, fileAdapterId) => { try { const savetos3 = await Parse.Cloud.run("savetofileadapter", { fileBase64: base64, - fileName: filname + fileName: filename, + id: fileAdapterId }); return { url: savetos3.url }; } catch (err) { @@ -391,11 +398,16 @@ const Forms = (props) => { const size = file.size; const name = generatePdfName(16); const pdfFile = file; - if (extUserData?.TenantId?.ActiveFileAdapter) { + const fileAdapterId = extUserData?.TenantId?.ActiveFileAdapter || ""; + if (fileAdapterId) { const base64 = await toDataUrl(file); const fileBase64 = base64.split(",").pop(); const ext = file?.name?.split(".").pop(); - const fileRes = await saveToCustomFile(fileBase64, `${name}.${ext}`); + const fileRes = await saveToCustomFile( + fileBase64, + `${name}.${ext}`, + fileAdapterId + ); if (fileRes.url) { setFileUpload(fileRes?.url); const tenantId = localStorage.getItem("TenantId"); @@ -459,11 +471,16 @@ const Forms = (props) => { return; } else { const name = generatePdfName(16); - if (extUserData?.TenantId?.ActiveFileAdapter) { + const fileAdapterId = extUserData?.TenantId?.ActiveFileAdapter || ""; + if (fileAdapterId) { const base64 = await uriToBase64(url); const fileBase64 = base64.split(",").pop(); const ext = file?.name?.split(".").pop(); - const fileRes = await saveToCustomFile(fileBase64, `${name}.${ext}`); + const fileRes = await saveToCustomFile( + fileBase64, + `${name}.${ext}`, + fileAdapterId + ); if (fileRes.url) { setFileUpload(fileRes.url); setfileload(false); @@ -558,7 +575,7 @@ const Forms = (props) => { objectId: ExtCls[0].objectId }); if (extUserData?.TenantId?.ActiveFileAdapter) { - object.set("IsFileAdapter", true); + object.set("FileAdapterId", extUserData?.TenantId?.ActiveFileAdapter); } const res = await object.save(); if (res) { @@ -664,12 +681,17 @@ const Forms = (props) => { type: "application/pdf" }); setIsDecrypting(false); + const fileAdapterId = extUserData?.TenantId?.ActiveFileAdapter || ""; // Upload the file to Parse Server - if (extUserData?.TenantId?.ActiveFileAdapter) { + if (fileAdapterId) { const base64 = await toDataUrl(pdfFile); const fileBase64 = base64.split(",").pop(); const ext = formData?.file?.name?.split(".").pop(); - const fileRes = await saveToCustomFile(fileBase64, `${name}.${ext}`); + const fileRes = await saveToCustomFile( + fileBase64, + `${name}.${ext}`, + fileAdapterId + ); if (fileRes.url) { setFormData((prev) => ({ ...prev, password: "" })); setFileUpload(fileRes?.url); diff --git a/apps/OpenSign/src/pages/Opensigndrive.js b/apps/OpenSign/src/pages/Opensigndrive.js index ecf4e0bcb..1d99116a6 100644 --- a/apps/OpenSign/src/pages/Opensigndrive.js +++ b/apps/OpenSign/src/pages/Opensigndrive.js @@ -499,22 +499,13 @@ function Opensigndrive() { //function to use check tour status of open sign drive async function checkTourStatus() { const cloudRes = await Parse.Cloud.run("getUserDetails"); - const res = { data: cloudRes.toJSON() }; - if (res.data && res.data.TourStatus && res.data.TourStatus.length > 0) { - const tourStatus = res.data.TourStatus; + if (cloudRes) { + const extUser = JSON.parse(JSON.stringify(cloudRes)); + localStorage.setItem("Extand_Class", JSON.stringify([extUser])); + const tourStatus = extUser?.TourStatus || []; setTourStatusArr(tourStatus); - const filteredtourStatus = tourStatus.filter((obj) => obj["driveTour"]); - if (filteredtourStatus.length > 0) { - const driveTour = filteredtourStatus[0]["driveTour"]; - // console.log("loginTour", loginTour); - if (driveTour) { - setIsTour(false); - } else { - setIsTour(true); - } - } else { - setIsTour(true); - } + const driveTour = tourStatus.find((obj) => obj.driveTour)?.driveTour; + setIsTour(!driveTour); } else { setIsTour(true); } diff --git a/apps/OpenSign/src/primitives/DownloadPdfZip.js b/apps/OpenSign/src/primitives/DownloadPdfZip.js index f00b4aa60..a5902fedb 100644 --- a/apps/OpenSign/src/primitives/DownloadPdfZip.js +++ b/apps/OpenSign/src/primitives/DownloadPdfZip.js @@ -35,11 +35,11 @@ function DownloadPdfZip(props) { try { // Fetch the first PDF (Signed Document) const docId = pdfDetails?.[0]?.objectId || ""; - const isFileAdapter = pdfDetails?.[0]?.IsFileAdapter - ? pdfDetails?.[0]?.IsFileAdapter - : false; + const fileAdapterId = pdfDetails?.[0]?.FileAdapterId + ? pdfDetails?.[0]?.FileAdapterId + : ""; console.log("pdfDetails?.[0] ", pdfDetails?.[0]); - const signedUrl = await getSignedUrl(pdfUrl, docId, isFileAdapter); + const signedUrl = await getSignedUrl(pdfUrl, docId, fileAdapterId); console.log("signedUrl ", signedUrl); const pdf1Response = await fetch(signedUrl); if (!pdf1Response.ok) { diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index b09ade37e..136994fd4 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -275,9 +275,7 @@ const ReportTable = (props) => { AutomaticReminders: Doc?.AutomaticReminders || false, RemindOnceInEvery: Doc?.RemindOnceInEvery || 5, IsEnableOTP: Doc?.IsEnableOTP || false, - IsTourEnabled: Doc?.IsTourEnabled || false, - IsFileAdapter: Doc?.IsFileAdapter || false - + FileAdapterId: Doc?.FileAdapterId || "" }; try { const res = await axios.post( @@ -605,25 +603,15 @@ const ReportTable = (props) => { async function checkTourStatus() { const cloudRes = await Parse.Cloud.run("getUserDetails"); - const res = { data: cloudRes.toJSON() }; - if (res.data && res.data.TourStatus && res.data.TourStatus.length > 0) { - const tourStatus = res.data.TourStatus; - // console.log("res ", res.data.TourStatus); + if (cloudRes) { + const extUser = JSON.parse(JSON.stringify(cloudRes)); + localStorage.setItem("Extand_Class", JSON.stringify([extUser])); + const tourStatus = extUser?.TourStatus || []; setTourStatusArr(tourStatus); - const filteredtourStatus = tourStatus.filter( - (obj) => obj["templateTour"] - ); - if (filteredtourStatus.length > 0) { - const templateTour = filteredtourStatus[0]["templateTour"]; - - if (templateTour) { - setIsTour(false); - } else { - setIsTour(true); - } - } else { - setIsTour(true); - } + const templateTour = tourStatus.find( + (obj) => obj.templateTour + )?.templateTour; + setIsTour(!templateTour); } else { setIsTour(true); } @@ -676,7 +664,7 @@ const ReportTable = (props) => { const isCompleted = item?.IsCompleted || false; const templateId = props?.ReportName === "Templates" && item.objectId; const docId = props?.ReportName !== "Templates" && item.objectId; - const isFileAdapter = item?.IsFileAdapter ? item?.IsFileAdapter : false; + const fileAdapterId = item?.FileAdapterId ? item?.FileAdapterId : ""; if (url) { try { @@ -686,7 +674,7 @@ const ReportTable = (props) => { const signedUrl = await getSignedUrl( url, docId, - isFileAdapter, + fileAdapterId, templateId ); await fetchUrl(signedUrl, pdfName); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js index 6e7b8c072..421fe6fed 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js @@ -213,7 +213,9 @@ export default async function createDocumentWithTemplate(request, response) { if (folderId) { object.set('Folder', folderPtr); } - object.set('IsFileAdapter', template?.IsFileAdapter || false); + if (template?.FileAdapterId) { + object.set('FileAdapterId'); + } const newACL = new Parse.ACL(); newACL.setPublicReadAccess(false); newACL.setPublicWriteAccess(false); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js index f438cd560..a6d061266 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js @@ -130,16 +130,13 @@ export default async function createDocumentwithCoordinate(request, response) { saveFileUsage(buffer.length, fileUrl, parseUser.userId.objectId); } else { const filename = sanitizeFileName(`${name}.pdf`); - if (parseExtUser?.TenantId?.ActiveFileAdapter) { - const adapter = { - fileAdapter: parseExtUser?.TenantId?.ActiveFileAdapter, - bucketName: parseExtUser?.TenantId?.FileAdapter?.bucketName, - region: parseExtUser?.TenantId?.FileAdapter?.region, - endpoint: parseExtUser?.TenantId?.FileAdapter?.endpoint, - accessKeyId: parseExtUser?.TenantId?.FileAdapter?.accessKeyId, - secretAccessKey: parseExtUser?.TenantId?.FileAdapter?.secretAccessKey, - baseUrl: parseExtUser?.TenantId?.FileAdapter?.baseUrl, - }; + let adapter = {}; + const ActiveFileAdapter = parseExtUser?.TenantId?.ActiveFileAdapter || ''; + if (ActiveFileAdapter) { + adapter = + parseExtUser?.TenantId?.FileAdapters?.find(x => (x.id = ActiveFileAdapter)) || {}; + } + if (adapter?.id) { const filedata = Buffer.from(base64File, 'base64'); // `uploadFileToS3` is used to save document in user's file storage fileUrl = await uploadFileToS3(filedata, filename, 'application/pdf', adapter); @@ -180,9 +177,7 @@ export default async function createDocumentwithCoordinate(request, response) { object.set('IsTourEnabled', isTourEnabled); object.set('IsSendMail', send_email); if (parseExtUser?.TenantId?.ActiveFileAdapter) { - object.set('IsFileAdapter', true); - } else { - object.set('IsFileAdapter', false); + object.set('FileAdapterId', parseExtUser?.TenantId?.ActiveFileAdapter); } let contact = []; if (signers && signers.length > 0) { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js index b5cb2006f..04e87e5fe 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js @@ -59,16 +59,13 @@ export default async function createTemplatewithCoordinate(request, response) { saveFileUsage(buffer.length, fileUrl, parseUser.userId.objectId); } else { const filename = sanitizeFileName(`${name}.pdf`); - if (parseExtUser?.TenantId?.ActiveFileAdapter) { - const adapter = { - fileAdapter: parseExtUser?.TenantId?.ActiveFileAdapter, - bucketName: parseExtUser?.TenantId?.FileAdapter?.bucketName, - region: parseExtUser?.TenantId?.FileAdapter?.region, - endpoint: parseExtUser?.TenantId?.FileAdapter?.endpoint, - accessKeyId: parseExtUser?.TenantId?.FileAdapter?.accessKeyId, - secretAccessKey: parseExtUser?.TenantId?.FileAdapter?.secretAccessKey, - baseUrl: parseExtUser?.TenantId?.FileAdapter?.baseUrl, - }; + let adapter = {}; + const ActiveFileAdapter = parseExtUser?.TenantId?.ActiveFileAdapter || ''; + if (ActiveFileAdapter) { + adapter = + parseExtUser?.TenantId?.FileAdapters?.find(x => (x.id = ActiveFileAdapter)) || {}; + } + if (adapter?.id) { const filedata = Buffer.from(base64File, 'base64'); // `uploadFileToS3` is used to save document in user's file storage fileUrl = await uploadFileToS3(filedata, filename, 'application/pdf', adapter); @@ -205,9 +202,7 @@ export default async function createTemplatewithCoordinate(request, response) { }); } if (parseExtUser?.TenantId?.ActiveFileAdapter) { - object.set('IsFileAdapter', true); - } else { - object.set('IsFileAdapter', false); + object.set('FileAdapterId', parseExtUser?.TenantId?.ActiveFileAdapter); } const newACL = new Parse.ACL(); newACL.setPublicReadAccess(false); diff --git a/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js b/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js index a8bf4e98d..0a4bcac31 100644 --- a/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js +++ b/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js @@ -2,20 +2,20 @@ import { useLocal } from '../../Utils.js'; import getPresignedUrl from './getSignedUrl.js'; async function DocumentAfterFind(request) { - if (useLocal !== 'true') { - if (request.objects.length === 1) { - if (request.objects) { - const obj = request.objects[0]; + if (request.objects.length === 1) { + if (request.objects) { + const obj = request.objects[0]; + const FileAdapterId = obj?.get('FileAdapterId') || ''; + if (FileAdapterId || useLocal !== 'true') { const SignedUrl = obj?.get('SignedUrl') && obj?.get('SignedUrl'); const Url = obj?.get('URL') && obj?.get('URL'); const certificateUrl = obj.get('CertificateUrl') && obj.get('CertificateUrl'); - const IsFileAdapter = obj?.get('IsFileAdapter') || false; let fileAdapter = {}; - if (IsFileAdapter) { + if (FileAdapterId) { const tenantId = obj?.get('ExtUserPtr')?.get('TenantId'); if (tenantId) { const _tenantId = JSON.parse(JSON.stringify(obj?.get('ExtUserPtr')?.get('TenantId'))); - fileAdapter = _tenantId?.FileAdapter || {}; + fileAdapter = _tenantId?.FileAdapters?.find(x => x.id === FileAdapterId) || {}; } } if (SignedUrl) { diff --git a/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js b/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js index da07c2aba..82f0974e4 100644 --- a/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js +++ b/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js @@ -54,7 +54,7 @@ export default async function GetTemplate(request) { const res = await template.first({ useMasterKey: true }); if (res) { const templateRes = JSON.parse(JSON.stringify(res)); - delete templateRes?.ExtUserPtr?.TenantId?.FileAdapter; + delete templateRes?.ExtUserPtr?.TenantId?.FileAdapters; return templateRes; } else { return { error: "You don't have access of this document!" }; @@ -76,7 +76,7 @@ export default async function GetTemplate(request) { // console.log("res ", res) if (res) { const templateRes = JSON.parse(JSON.stringify(res)); - delete templateRes?.ExtUserPtr?.TenantId?.FileAdapter; + delete templateRes?.ExtUserPtr?.TenantId?.FileAdapters; return templateRes; } else { return { error: "You don't have access of this document!" }; diff --git a/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js b/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js index 01f801064..b379ffe33 100644 --- a/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js +++ b/apps/OpenSignServer/cloud/parsefunction/PublicUserLinkContactToDoc.js @@ -64,7 +64,7 @@ const createDocumentFromTemplate = async (template, existContact, index) => { object.set('OriginIp', template?.OriginIp || ''); object.set('IsEnableOTP', template?.IsEnableOTP || false); object.set('IsTourEnabled', template?.IsTourEnabled || false); - object.set('IsFileAdapter', template?.IsFileAdapter || false); + object.set('FileAdapterId', template?.FileAdapterId || ''); let signers = template?.Signers || []; const signerobj = { __type: 'Pointer', diff --git a/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js b/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js index 46e9c83ad..44d606a1f 100644 --- a/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js +++ b/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js @@ -6,29 +6,30 @@ async function TemplateAfterFind(request) { if (request.objects.length === 1) { if (request.objects) { const obj = request.objects[0]; - const SignedUrl = obj?.get('SignedUrl') && obj?.get('SignedUrl'); - const Url = obj?.get('URL') && obj?.get('URL'); - const certificateUrl = obj.get('CertificateUrl') && obj.get('CertificateUrl'); - const IsFileAdapter = obj?.get('IsFileAdapter') || false; - let fileAdapter = {}; - if (IsFileAdapter) { - const tenantId = obj?.get('ExtUserPtr')?.get('TenantId'); - if (tenantId) { - const _tenantId = JSON.parse(JSON.stringify(obj?.get('ExtUserPtr')?.get('TenantId'))); - fileAdapter = _tenantId?.FileAdapter || {}; + const FileAdapterId = obj?.get('FileAdapterId') || ''; + if (FileAdapterId || useLocal !== 'true') { + const SignedUrl = obj?.get('SignedUrl') && obj?.get('SignedUrl'); + const Url = obj?.get('URL') && obj?.get('URL'); + const certificateUrl = obj.get('CertificateUrl') && obj.get('CertificateUrl'); + let fileAdapter = {}; + if (FileAdapterId) { + const tenantId = obj?.get('ExtUserPtr')?.get('TenantId'); + if (tenantId) { + const _tenantId = JSON.parse(JSON.stringify(obj?.get('ExtUserPtr')?.get('TenantId'))); + fileAdapter = _tenantId?.FileAdapters?.find(x => x.id === FileAdapterId) || {}; + } } + if (SignedUrl) { + obj.set('SignedUrl', getPresignedUrl(SignedUrl, fileAdapter)); + } + if (Url) { + obj.set('URL', getPresignedUrl(Url, fileAdapter)); + } + if (certificateUrl) { + obj.set('CertificateUrl', getPresignedUrl(certificateUrl, fileAdapter)); + } + return [obj]; } - if (SignedUrl) { - obj.set('SignedUrl', getPresignedUrl(SignedUrl, fileAdapter)); - } - if (Url) { - obj.set('URL', getPresignedUrl(Url, fileAdapter)); - } - if (certificateUrl) { - obj.set('CertificateUrl', getPresignedUrl(certificateUrl, fileAdapter)); - } - - return [obj]; } } } diff --git a/apps/OpenSignServer/cloud/parsefunction/addFileAdapter.js b/apps/OpenSignServer/cloud/parsefunction/addFileAdapter.js index 1506fc7a6..0a37a9831 100644 --- a/apps/OpenSignServer/cloud/parsefunction/addFileAdapter.js +++ b/apps/OpenSignServer/cloud/parsefunction/addFileAdapter.js @@ -1,7 +1,19 @@ +// `generateId` is used to unique Id for fileAdapter +function generateId(length) { + const characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; + let result = ''; + const charactersLength = characters.length; + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + return result; +} + export default async function addFileAdapter(request) { if (!request?.user) { throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.'); } + const fileAdapterName = request.params.fileAdapterName; const bucketName = request.params.bucketName; const region = request.params.region; const endpoint = request.params.endpoint; @@ -10,24 +22,61 @@ export default async function addFileAdapter(request) { const secretAccessKey = request.params.secretAccessKey; const adapter = request.params.fileAdapter; - if (bucketName && region && endpoint && accessKeyId && secretAccessKey && adapter) { + if (fileAdapterName && accessKeyId && secretAccessKey && adapter) { try { const extUserCls = new Parse.Query('contracts_Users'); extUserCls.equalTo('UserId', request.user); + extUserCls.include('TenantId'); const extUser = await extUserCls.first({ useMasterKey: true }); if (extUser) { + const _extUser = JSON.parse(JSON.stringify(extUser)); const tenantCls = new Parse.Object('partners_Tenant'); tenantCls.id = extUser?.get('TenantId')?.id; - const adapterConfig = { - bucketName: bucketName, - region: region, - endpoint: endpoint, - baseUrl: baseUrl, - accessKeyId: accessKeyId, - secretAccessKey: secretAccessKey, - }; - tenantCls.set('FileAdapter', adapterConfig); - tenantCls.set('ActiveFileAdapter', adapter); + const existsFileAdaptes = _extUser?.TenantId?.FileAdapters + ? _extUser?.TenantId?.FileAdapters + : []; + + // assign existing file adapters or empty array + let updatedFileAdapters = existsFileAdaptes; + const uniqueId = generateId(10); + const id = extUser?.get('TenantId')?.id + '_' + uniqueId; + const index = updatedFileAdapters?.findIndex(x => x.fileAdapterName === fileAdapterName); + + if (index !== -1) { + // If an object with the same fileAdapterName exists, update it + if (bucketName || region || endpoint || baseUrl) { + throw new Parse.Error( + Parse.Error.INVALID_QUERY, + 'Cannot update bucketName, region, endpoint, baseUrl.' + ); + } else { + const adapterConfig = { accessKeyId: accessKeyId, secretAccessKey: secretAccessKey }; + updatedFileAdapters[index] = { ...updatedFileAdapters[index], ...adapterConfig }; + } + } else { + if (bucketName && region && endpoint && baseUrl) { + // If the object with the given fileAdapterName doesn't exist, add a new one + updatedFileAdapters.push({ + id: id, + fileAdapterName: fileAdapterName, + fileAdapter: adapter, + bucketName: bucketName, + region: region, + endpoint: endpoint, + baseUrl: baseUrl, + accessKeyId: accessKeyId, + secretAccessKey: secretAccessKey, + }); + } else { + throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Please provide all parameters.'); + } + } + tenantCls.set('FileAdapters', updatedFileAdapters); + if (adapter) { + tenantCls.set('ActiveFileAdapter', id); + } else { + tenantCls.unset('ActiveFileAdapter'); + } const updateTenant = await tenantCls.save(null, { useMasterKey: true }); const tenantSchema = new Parse.Schema('partners_Tenant'); tenantSchema.setCLP({ @@ -38,12 +87,46 @@ export default async function addFileAdapter(request) { update: { '*': true }, delete: { '*': true }, addField: { '*': true }, - protectedFields: { '*': ['FileAdapter'] }, + protectedFields: { '*': ['FileAdapters'] }, }); await tenantSchema.update(); return updateTenant.updatedAt; + } else { + throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'User not found.'); + } + } catch (err) { + console.log('Err in add custom file adapter', err); + const code = err.code || 400; + const msg = err.message || 'Something went wrong.'; + throw new Parse.Error(code, msg); + } + } else if (adapter === 'opensign') { + try { + const extUserCls = new Parse.Query('contracts_Users'); + extUserCls.equalTo('UserId', request.user); + extUserCls.include('TenantId'); + const extUser = await extUserCls.first({ useMasterKey: true }); + if (extUser) { + const tenantCls = new Parse.Object('partners_Tenant'); + tenantCls.id = extUser?.get('TenantId')?.id; + tenantCls.unset('ActiveFileAdapter'); + const updateTenant = await tenantCls.save(null, { useMasterKey: true }); + const tenantSchema = new Parse.Schema('partners_Tenant'); + tenantSchema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + protectedFields: { '*': ['FileAdapters'] }, + }); + await tenantSchema.update(); + return updateTenant.updatedAt; + } else { + throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'User not found.'); } - return extUser; } catch (err) { console.log('Err in add custom file adapter', err); const code = err.code || 400; diff --git a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js index a787231d2..d81f67786 100644 --- a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js +++ b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js @@ -202,7 +202,7 @@ export default async function createBatchDocs(request) { DocSentAt: { __type: 'Date', iso: isoDate }, IsEnableOTP: x?.IsEnableOTP || false, IsTourEnabled: x?.IsTourEnabled || false, - IsFileAdapter: x?.IsFileAdapter || false, + FileAdapterId: x?.FileAdapterId || '', }, }; }); diff --git a/apps/OpenSignServer/cloud/parsefunction/getDocument.js b/apps/OpenSignServer/cloud/parsefunction/getDocument.js index 757e73971..821d24210 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getDocument.js +++ b/apps/OpenSignServer/cloud/parsefunction/getDocument.js @@ -22,7 +22,7 @@ export default async function getDocument(request) { if (res) { const IsEnableOTP = res?.get('IsEnableOTP') || false; const document = JSON.parse(JSON.stringify(res)); - delete document.ExtUserPtr.TenantId.FileAdapter; + delete document.ExtUserPtr.TenantId.FileAdapters; if (!IsEnableOTP) { return document; } else { diff --git a/apps/OpenSignServer/cloud/parsefunction/getFileAdapter.js b/apps/OpenSignServer/cloud/parsefunction/getFileAdapter.js index 2aeab7a9d..8f13edf9d 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getFileAdapter.js +++ b/apps/OpenSignServer/cloud/parsefunction/getFileAdapter.js @@ -9,17 +9,26 @@ export default async function getFileAdapter(request) { const extUser = await extUserCls.first({ useMasterKey: true }); if (extUser) { const _extUser = JSON.parse(JSON.stringify(extUser)); - if (_extUser?.TenantId?.ActiveFileAdapter && _extUser?.TenantId?.FileAdapter?.bucketName) { - const adapterConfig = { - bucketName: _extUser?.TenantId?.FileAdapter?.bucketName, - region: _extUser?.TenantId?.FileAdapter?.region, - endpoint: _extUser?.TenantId?.FileAdapter?.endpoint, - baseUrl: _extUser?.TenantId?.FileAdapter?.baseUrl, - accessKeyId: _extUser?.TenantId?.FileAdapter?.accessKeyId, - secretAccessKey: _extUser?.TenantId?.FileAdapter?.secretAccessKey, - fileAdapter: _extUser?.TenantId?.ActiveFileAdapter, - }; - return adapterConfig; + const isFileAdapter = _extUser?.TenantId?.FileAdapters?.length > 0 ? true : false; + if (_extUser?.TenantId?.ActiveFileAdapter && isFileAdapter) { + const lastIndex = _extUser?.TenantId?.FileAdapters?.length - 1; + const lastObj = _extUser?.TenantId?.FileAdapters[lastIndex]; + if (lastIndex >= 0) { + const adapterConfig = { + id: lastObj?.id, + fileAdapterName: lastObj?.fileAdapterName, + bucketName: lastObj?.bucketName, + region: lastObj?.region, + endpoint: lastObj?.endpoint, + baseUrl: lastObj?.baseUrl, + accessKeyId: lastObj?.accessKeyId, + secretAccessKey: lastObj?.secretAccessKey, + fileAdapter: lastObj?.fileAdapter, + }; + return adapterConfig; + } else { + return {}; + } } else { return {}; } diff --git a/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js b/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js index b720daa7e..8753f30a6 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js +++ b/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js @@ -31,10 +31,10 @@ export async function getSignedUrl(request) { const docId = request.params.docId || ''; const templateId = request.params.templateId || ''; const url = request.params.url; - const IsFileAdapter = request.params.isFileAdapter || ''; + const fileAdapterId = request.params.fileAdapterId || ''; if (docId || templateId) { try { - if (useLocal !== 'true') { + if (fileAdapterId || useLocal !== 'true') { const query = new Parse.Query(docId ? 'contracts_Document' : 'contracts_Template'); query.equalTo('objectId', docId ? docId : templateId); query.include('ExtUserPtr.TenantId'); @@ -50,23 +50,23 @@ export async function getSignedUrl(request) { ); } else { let adapterConfig = {}; - if (IsFileAdapter) { - // `FileAdapter` && `ActiveFileAdapter` is used to save file in user's fileAdapter - const FileAdapter = _resDoc?.ExtUserPtr?.TenantId?.FileAdapter; - const ActiveFileAdapter = _resDoc?.ExtUserPtr?.TenantId?.ActiveFileAdapter; - if (FileAdapter && ActiveFileAdapter) { - adapterConfig = { ActiveFileAdapter: ActiveFileAdapter, ...FileAdapter }; - } + if (fileAdapterId) { + // `adapterConfig` is used to get file in user's fileAdapter + adapterConfig = + _resDoc?.ExtUserPtr?.TenantId?.FileAdapters?.find( + x => x.id === fileAdapterId + ) || {}; } const presignedUrl = getPresignedUrl(url, adapterConfig); return presignedUrl; } } else { - const FileAdapter = _resDoc?.ExtUserPtr?.TenantId?.FileAdapter; - const ActiveFileAdapter = _resDoc?.ExtUserPtr?.TenantId?.ActiveFileAdapter; let adapterConfig = {}; - if (FileAdapter && ActiveFileAdapter) { - adapterConfig = { ActiveFileAdapter: ActiveFileAdapter, ...FileAdapter }; + if (fileAdapterId) { + // `adapterConfig` is used to get file in user's fileAdapter + adapterConfig = + _resDoc?.ExtUserPtr?.TenantId?.FileAdapters?.find(x => x.id === fileAdapterId) || + {}; } const presignedUrl = getPresignedUrl(url, adapterConfig); return presignedUrl; diff --git a/apps/OpenSignServer/cloud/parsefunction/getUserDetails.js b/apps/OpenSignServer/cloud/parsefunction/getUserDetails.js index c2310665b..ff1bda173 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getUserDetails.js +++ b/apps/OpenSignServer/cloud/parsefunction/getUserDetails.js @@ -14,7 +14,7 @@ async function getUserDetails(request) { userQuery.include('UserId'); userQuery.include('CreatedBy'); userQuery.exclude('CreatedBy.authData'); - userQuery.exclude('TenantId.FileAdapter'); + userQuery.exclude('TenantId.FileAdapters'); userQuery.exclude('google_refresh_token'); if (userId) { userQuery.equalTo('CreatedBy', { __type: 'Pointer', className: '_User', objectId: userId }); diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js index e35c70e4f..9e2fcd47c 100644 --- a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js +++ b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js @@ -19,7 +19,8 @@ async function uploadFile(pdfName, filepath, adapter) { let fileUrl; if (adapter?.bucketName) { const adapterConfig = { - fileAdapter: adapter?.ActiveFileAdapter, + id: adapter?.id, + fileAdapter: adapter?.fileAdapter, bucketName: adapter?.bucketName, region: adapter?.region, endpoint: adapter?.endpoint, @@ -311,8 +312,9 @@ async function PDF(req) { } const _resDoc = resDoc?.toJSON(); // `FileAdapter` && `ActiveFileAdapter` is used to save file in user's fileAdapter - const FileAdapter = _resDoc?.ExtUserPtr?.TenantId?.FileAdapter; const ActiveFileAdapter = _resDoc?.ExtUserPtr?.TenantId?.ActiveFileAdapter; + const FileAdapter = + _resDoc?.ExtUserPtr?.TenantId?.FileAdapters?.find(x => x.id === ActiveFileAdapter) || {}; let adapterConfig = {}; if (FileAdapter && ActiveFileAdapter) { adapterConfig = { ActiveFileAdapter: ActiveFileAdapter, ...FileAdapter }; diff --git a/apps/OpenSignServer/cloud/parsefunction/reportsJson.js b/apps/OpenSignServer/cloud/parsefunction/reportsJson.js index 112ad2a60..1270e4e2a 100644 --- a/apps/OpenSignServer/cloud/parsefunction/reportsJson.js +++ b/apps/OpenSignServer/cloud/parsefunction/reportsJson.js @@ -29,7 +29,7 @@ export default function reportJson(id, userId) { 'Signers.Phone', 'Placeholders', 'IsSignyourself', - 'IsFileAdapter', + 'FileAdapterId', ], }; @@ -75,7 +75,7 @@ export default function reportJson(id, userId) { 'AuditTrail', 'Placeholders', 'SignedUrl', - 'IsFileAdapter', + 'FileAdapterId', ], }; // In progess report @@ -115,7 +115,7 @@ export default function reportJson(id, userId) { 'SendMail', 'Placeholders', 'SignedUrl', - 'IsFileAdapter', + 'FileAdapterId', ], }; // completed documents report @@ -147,7 +147,7 @@ export default function reportJson(id, userId) { 'Placeholders', 'IsSignyourself', 'IsCompleted', - 'IsFileAdapter', + 'FileAdapterId', ], }; // declined documents report @@ -177,7 +177,7 @@ export default function reportJson(id, userId) { 'Placeholders', 'DeclineReason', 'SignedUrl', - 'IsFileAdapter', + 'FileAdapterId', ], }; // Expired Documents report @@ -210,7 +210,7 @@ export default function reportJson(id, userId) { 'Signers.Phone', 'Placeholders', 'SignedUrl', - 'IsFileAdapter', + 'FileAdapterId', ], }; // Recently sent for signatures report show on dashboard @@ -248,7 +248,7 @@ export default function reportJson(id, userId) { 'ExpiryDate', 'Placeholders', 'SignedUrl', - 'IsFileAdapter', + 'FileAdapterId', ], }; // Recent signature requests report show on dashboard @@ -291,7 +291,7 @@ export default function reportJson(id, userId) { 'Signers.Phone', 'Placeholders', 'SignedUrl', - 'IsFileAdapter', + 'FileAdapterId', ], }; // Drafts report show on dashboard @@ -320,7 +320,7 @@ export default function reportJson(id, userId) { 'Signers.Email', 'Signers.Phone', 'Placeholders', - 'IsFileAdapter', + 'FileAdapterId', ], }; // contact book report @@ -361,7 +361,7 @@ export default function reportJson(id, userId) { 'IsPublic', 'SharedWith.Name', 'SendinOrder', - 'IsFileAdapter', + 'FileAdapterId', ], }; default: diff --git a/apps/OpenSignServer/cloud/parsefunction/saveToFileAdapter.js b/apps/OpenSignServer/cloud/parsefunction/saveToFileAdapter.js index 02daeab91..47d73a070 100644 --- a/apps/OpenSignServer/cloud/parsefunction/saveToFileAdapter.js +++ b/apps/OpenSignServer/cloud/parsefunction/saveToFileAdapter.js @@ -9,6 +9,7 @@ export default async function saveToFileAdapter(request) { throw new Parse.Error(Parse.Error.INVALID_QUERY, 'Please provide file.'); } const fileBase64 = request.params.fileBase64; + const id = request.params.id; try { const extCls = new Parse.Query('contracts_Users'); extCls.equalTo('UserId', request.user); @@ -16,16 +17,18 @@ export default async function saveToFileAdapter(request) { const resExt = await extCls.first({ useMasterKey: true }); if (resExt) { const _resExt = JSON.parse(JSON.stringify(resExt)); - - if (_resExt?.TenantId.FileAdapter?.accessKeyId) { + const fileAdapters = _resExt?.TenantId.FileAdapters || []; + const fileAdapter = fileAdapters?.find(x => x.id === id) || {}; + if (fileAdapter?.accessKeyId) { const adapterConfig = { - fileAdapter: _resExt?.TenantId?.ActiveFileAdapter, - bucketName: _resExt?.TenantId?.FileAdapter?.bucketName, - region: _resExt?.TenantId?.FileAdapter?.region, - endpoint: _resExt?.TenantId?.FileAdapter?.endpoint, - accessKeyId: _resExt?.TenantId?.FileAdapter?.accessKeyId, - secretAccessKey: _resExt?.TenantId?.FileAdapter?.secretAccessKey, - baseUrl: _resExt?.TenantId?.FileAdapter?.baseUrl, + id: id, + fileAdapter: fileAdapter?.fileAdapter, + bucketName: fileAdapter?.bucketName, + region: fileAdapter?.region, + endpoint: fileAdapter?.endpoint, + accessKeyId: fileAdapter?.accessKeyId, + secretAccessKey: fileAdapter?.secretAccessKey, + baseUrl: fileAdapter?.baseUrl, }; const buffer = Buffer.from(fileBase64, 'base64'); const fileName = request.params.fileName; diff --git a/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js b/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js index dae9ec9af..fa77bcffc 100644 --- a/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js +++ b/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js @@ -37,7 +37,8 @@ const makeEmail = async (to, from, subject, html, url, pdfName) => { let Pdf = fs.createWriteStream('test.pdf'); const writeToLocalDisk = () => { return new Promise((resolve, reject) => { - if (useLocal !== 'true') { + const isSecure = new URL(url)?.protocol === 'https:'; + if (useLocal !== 'true' || isSecure) { https.get(url, async function (response) { response.pipe(Pdf); response.on('end', () => resolve('success')); diff --git a/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js b/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js index 508951156..6ac5f7516 100644 --- a/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js +++ b/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js @@ -33,7 +33,8 @@ async function sendMailProvider(req, plan, monthchange) { let Pdf = fs.createWriteStream('test.pdf'); const writeToLocalDisk = () => { return new Promise((resolve, reject) => { - if (useLocal !== 'true') { + const isSecure = new URL(url)?.protocol === 'https:'; + if (useLocal !== 'true' || isSecure) { https.get(req.params.url, async function (response) { response.pipe(Pdf); response.on('end', () => resolve('success')); @@ -199,7 +200,8 @@ async function sendcustomsmtp(extRes, req) { let Pdf = fs.createWriteStream('test.pdf'); const writeToLocalDisk = () => { return new Promise((resolve, reject) => { - if (useLocal !== 'true') { + const isSecure = new URL(url)?.protocol === 'https:'; + if (useLocal !== 'true' || isSecure) { https.get(req.params.url, async function (response) { response.pipe(Pdf); response.on('end', () => resolve('success')); diff --git a/apps/OpenSignServer/databases/migrations/20241004104551-isfileadapter_doccls.cjs b/apps/OpenSignServer/databases/migrations/20241004104551-fileadapterId_doccls.cjs similarity index 82% rename from apps/OpenSignServer/databases/migrations/20241004104551-isfileadapter_doccls.cjs rename to apps/OpenSignServer/databases/migrations/20241004104551-fileadapterId_doccls.cjs index 109feeb44..06f821202 100644 --- a/apps/OpenSignServer/databases/migrations/20241004104551-isfileadapter_doccls.cjs +++ b/apps/OpenSignServer/databases/migrations/20241004104551-fileadapterId_doccls.cjs @@ -5,7 +5,7 @@ exports.up = async Parse => { const className = 'contracts_Document'; const schema = new Parse.Schema(className); - schema.addBoolean('IsFileAdapter'); + schema.addBoolean('FileAdapterId'); return schema.update(); }; @@ -16,6 +16,6 @@ exports.up = async Parse => { exports.down = async Parse => { const className = 'contracts_Document'; const schema = new Parse.Schema(className); - schema.deleteField('IsFileAdapter'); + schema.deleteField('FileAdapterId'); return schema.update(); };