mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-08-30 11:49:45 +02:00
Merge pull request #1309 from OpenSignLabs/validation
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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!" };
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 || '',
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 });
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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'));
|
||||
|
||||
@@ -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'));
|
||||
|
||||
+2
-2
@@ -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();
|
||||
};
|
||||
Reference in New Issue
Block a user