- file selected :{" "}
- {fileupload?.split("/")?.pop()?.split("_")[1]}
+ file selected : {getFileName(fileload)}
{
- setFileUpload([]);
- }}
+ onClick={() => setFileUpload([])}
className="cursor-pointer px-[10px] text-[20px] font-bold bg-white text-red-500"
>
diff --git a/apps/OpenSign/src/pages/Report.js b/apps/OpenSign/src/pages/Report.js
index 10765260a..674591359 100644
--- a/apps/OpenSign/src/pages/Report.js
+++ b/apps/OpenSign/src/pages/Report.js
@@ -54,7 +54,7 @@ const Report = () => {
setHeading(json.heading);
setReportName(json.reportName);
setForm(json.form);
- setReportHelp(json?.helpMsg)
+ setReportHelp(json?.helpMsg);
const currentUser = Parse.User.current().id;
const headers = {
@@ -106,12 +106,14 @@ const Report = () => {
} else {
setIsMoreDocs(false);
}
- setIsNextRecord(false);
- setList((prevRecord) =>
- prevRecord.length > 0
- ? [...prevRecord, ...res.data.result]
- : res.data.result
- );
+ if (!res.data.result.error) {
+ setIsNextRecord(false);
+ setList((prevRecord) =>
+ prevRecord.length > 0
+ ? [...prevRecord, ...res.data.result]
+ : res.data.result
+ );
+ }
}
setIsLoader(false);
} catch (err) {
diff --git a/apps/OpenSign/src/pages/UserProfile.js b/apps/OpenSign/src/pages/UserProfile.js
index 7fd7163fb..d79c2e619 100644
--- a/apps/OpenSign/src/pages/UserProfile.js
+++ b/apps/OpenSign/src/pages/UserProfile.js
@@ -66,6 +66,7 @@ function UserProfile() {
SetPhone(res.phone);
setImage(res.ProfilePic);
localStorage.setItem("username", res.name);
+ localStorage.setItem("profileImg", res.ProfilePic);
await updateExtUser({ Name: res.name, Phone: res.phone });
alert("Profile updated successfully.");
setEditMode(false);
@@ -147,7 +148,6 @@ function UserProfile() {
// console.log("File URL:", response.url());
if (response.url()) {
setImage(response.url());
- localStorage.setItem("profileImg", response.url());
setpercentage(0);
const tenantId = localStorage.getItem("TenantId");
SaveFileSize(size, response.url(), tenantId);
diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js
index d0d6bd428..69aee4102 100644
--- a/apps/OpenSign/src/primitives/GetReportDisplay.js
+++ b/apps/OpenSign/src/primitives/GetReportDisplay.js
@@ -199,7 +199,7 @@ const ReportTable = ({
const indexOfLastDoc = currentPage * docPerPage;
const indexOfFirstDoc = indexOfLastDoc - docPerPage;
// `currentLists` is total record render on current page
- const currentLists = List.slice(indexOfFirstDoc, indexOfLastDoc);
+ const currentLists = List?.slice(indexOfFirstDoc, indexOfLastDoc);
// Change page
const paginateFront = () => setCurrentPage(currentPage + 1);
diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js
index 05477562e..d3d31b2e4 100644
--- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js
+++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js
@@ -180,7 +180,7 @@ export default async function createDocumentwithCoordinate(request, response) {
const page = placeHolder.find(page => page.pageNumber === pageNumber);
const signOpt = { name: 'signature', status: 'required' };
const widgetData = {
- isStamp: widget.type === 'stamp',
+ isStamp: widget.type === 'stamp'|| widget.type === 'image',
key: randomId(),
isDrag: false,
scale: 1,
diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js
index 28203575e..4a0d3ed59 100644
--- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js
+++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplatewithCoordinate.js
@@ -136,7 +136,7 @@ export default async function createTemplatewithCoordinate(request, response) {
const page = placeHolder.find(page => page.pageNumber === pageNumber);
const signOpt = { name: 'signature', status: 'required' };
const widgetData = {
- isStamp: widget.type === 'stamp',
+ isStamp: widget.type === 'stamp'|| widget.type === 'image',
key: randomId(),
isDrag: false,
scale: 1,
diff --git a/apps/OpenSignServer/cloud/main.js b/apps/OpenSignServer/cloud/main.js
index 7850e9b56..90146e704 100644
--- a/apps/OpenSignServer/cloud/main.js
+++ b/apps/OpenSignServer/cloud/main.js
@@ -25,6 +25,10 @@ import callWebhook from './parsefunction/callWebhook.js';
import SubscribeFree from './parsefunction/SubscribeFree.js';
import DocumentBeforesave from './parsefunction/DocumentBeforesave.js';
import TemplateBeforeSave from './parsefunction/TemplateBeforesave.js';
+import DocumentBeforeFind from './parsefunction/DocumentAfterFind.js';
+import TemplateAfterFind from './parsefunction/TemplateAfterFind.js';
+import UserAfterFind from './parsefunction/UserAfterFInd.js';
+import SignatureAfterFind from './parsefunction/SignatureAfterFind.js';
Parse.Cloud.define('AddUserToRole', addUserToGroups);
Parse.Cloud.define('UserGroups', getUserGroups);
@@ -53,3 +57,7 @@ Parse.Cloud.afterSave('contracts_Users', ContractUsersAftersave);
Parse.Cloud.afterSave('contracts_Template', TemplateAfterSave);
Parse.Cloud.beforeSave('contracts_Document', DocumentBeforesave);
Parse.Cloud.beforeSave('contracts_Template', TemplateBeforeSave);
+Parse.Cloud.afterFind(Parse.User, UserAfterFind);
+Parse.Cloud.afterFind('contracts_Document', DocumentBeforeFind);
+Parse.Cloud.afterFind('contracts_Template', TemplateAfterFind);
+Parse.Cloud.afterFind("contracts_Signature", SignatureAfterFind);
diff --git a/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js b/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js
new file mode 100644
index 000000000..f913b1e66
--- /dev/null
+++ b/apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js
@@ -0,0 +1,24 @@
+import getPresignedUrl from './getSignedUrl.js';
+
+async function DocumentAfterFind(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');
+ if (SignedUrl) {
+ obj.set('SignedUrl', getPresignedUrl(SignedUrl));
+ }
+ if (Url) {
+ obj.set('URL', getPresignedUrl(Url));
+ }
+ if (certificateUrl) {
+ obj.set('CertificateUrl', getPresignedUrl(certificateUrl));
+ }
+
+ return [obj];
+ }
+ }
+}
+export default DocumentAfterFind;
diff --git a/apps/OpenSignServer/cloud/parsefunction/SignatureAfterFind.js b/apps/OpenSignServer/cloud/parsefunction/SignatureAfterFind.js
new file mode 100644
index 000000000..45ca5a8b5
--- /dev/null
+++ b/apps/OpenSignServer/cloud/parsefunction/SignatureAfterFind.js
@@ -0,0 +1,22 @@
+import getPresignedUrl from './getSignedUrl.js';
+
+async function SignatureAfterFind(request) {
+ if (request.objects.length === 1) {
+ if (request.objects) {
+ const obj = request.objects[0];
+ const ImageURL = obj?.get('ImageURL') && obj?.get('ImageURL');
+ const Initials = obj?.get('Initials') && obj?.get('Initials');
+
+ if (ImageURL) {
+ obj.set('ImageURL', getPresignedUrl(ImageURL));
+ }
+
+ if (Initials) {
+ obj.set('Initials', getPresignedUrl(Initials));
+ }
+
+ return [obj];
+ }
+ }
+}
+export default SignatureAfterFind;
diff --git a/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js b/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js
new file mode 100644
index 000000000..10f730669
--- /dev/null
+++ b/apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js
@@ -0,0 +1,24 @@
+import getPresignedUrl from './getSignedUrl.js';
+
+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');
+ if (SignedUrl) {
+ obj.set('SignedUrl', getPresignedUrl(SignedUrl));
+ }
+ if (Url) {
+ obj.set('URL', getPresignedUrl(Url));
+ }
+ if (certificateUrl) {
+ obj.set('CertificateUrl', getPresignedUrl(certificateUrl));
+ }
+
+ return [obj];
+ }
+ }
+}
+export default TemplateAfterFind;
diff --git a/apps/OpenSignServer/cloud/parsefunction/UserAfterFInd.js b/apps/OpenSignServer/cloud/parsefunction/UserAfterFInd.js
new file mode 100644
index 000000000..b27d2d272
--- /dev/null
+++ b/apps/OpenSignServer/cloud/parsefunction/UserAfterFInd.js
@@ -0,0 +1,17 @@
+import getPresignedUrl from './getSignedUrl.js';
+
+async function UserAfterFind(request) {
+ if (request.objects.length === 1) {
+ if (request.objects) {
+ const obj = request.objects[0];
+ const ProfilePic = obj?.get('ProfilePic') && obj?.get('ProfilePic');
+
+ if (ProfilePic) {
+ obj.set('ProfilePic', getPresignedUrl(ProfilePic));
+ }
+
+ return [obj];
+ }
+ }
+}
+export default UserAfterFind;
diff --git a/apps/OpenSignServer/cloud/parsefunction/getDocument.js b/apps/OpenSignServer/cloud/parsefunction/getDocument.js
index a88a97cf4..4556d1271 100644
--- a/apps/OpenSignServer/cloud/parsefunction/getDocument.js
+++ b/apps/OpenSignServer/cloud/parsefunction/getDocument.js
@@ -21,7 +21,7 @@ export default async function getDocument(request) {
query.include('Signers');
query.include('AuditTrail.UserPtr');
query.include('Placeholders');
- query.notEqualTo('IsArchive', true)
+ query.notEqualTo('IsArchive', true);
const res = await query.first({ useMasterKey: true });
if (res) {
const acl = res.getACL();
diff --git a/apps/OpenSignServer/cloud/parsefunction/getReport.js b/apps/OpenSignServer/cloud/parsefunction/getReport.js
index ee72f0d20..8749c2b28 100644
--- a/apps/OpenSignServer/cloud/parsefunction/getReport.js
+++ b/apps/OpenSignServer/cloud/parsefunction/getReport.js
@@ -42,7 +42,7 @@ export default async function getReport(request) {
}
}
} catch (err) {
- console.log('err', err);
+ console.log('err', err.message);
if (err.code == 209) {
return { error: 'Invalid session token' };
} else {
diff --git a/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js b/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js
new file mode 100644
index 000000000..d2869b549
--- /dev/null
+++ b/apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js
@@ -0,0 +1,26 @@
+import AWS from 'aws-sdk';
+const credentials = {
+ accessKeyId: process.env.DO_ACCESS_KEY_ID,
+ secretAccessKey: process.env.DO_SECRET_ACCESS_KEY,
+};
+AWS.config.update({ credentials: credentials, region: process.env.DO_REGION });
+const spacesEndpoint = new AWS.Endpoint(process.env.DO_ENDPOINT);
+
+const s3 = new AWS.S3({ endpoint: spacesEndpoint });
+
+export default function getPresignedUrl(url) {
+ // Create a new URL object
+ const parsedUrl = new URL(url);
+ // Get the pathname of the URL
+ const pathname = parsedUrl.pathname;
+ // Extract the filename from the pathname
+ const filename = pathname.substring(pathname.lastIndexOf('/') + 1);
+
+ // presignedGETURL return presignedUrl with expires time
+ const presignedGETURL = s3.getSignedUrl('getObject', {
+ Bucket: process.env.DO_SPACE,
+ Key: filename, //filename
+ Expires: 160, //time to expire in seconds
+ });
+ return presignedGETURL;
+}
diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js
index 0058eb68d..0a8630125 100644
--- a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js
+++ b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js
@@ -11,7 +11,7 @@ const serverUrl = process.env.SERVER_URL,
async function uploadFile(e, a) {
try {
var t = fs.readFileSync(a),
- s = new Parse.File(e, [...t]),
+ s = new Parse.File(e, [...t], 'application/pdf'),
r = (await s.save({ useMasterKey: !0 }), s.url());
return { imageUrl: r };
} catch (e) {
@@ -111,11 +111,11 @@ async function sendDoctoWebhook(t, e, a, s) {
}),
a.save(null, { useMasterKey: !0 });
} catch (e) {
- console.log('err save in contracts_Webhook', e);
+ console.log('err save in contracts_Webhook', e.message);
}
})
.catch(e => {
- console.log('Err send data to webhook', e);
+ console.log('Err send data to webhook', e.message);
try {
var a = new Parse.Object('contracts_Webhook');
a.set('Log', e?.status),
@@ -126,7 +126,7 @@ async function sendDoctoWebhook(t, e, a, s) {
}),
a.save(null, { useMasterKey: !0 });
} catch (e) {
- console.log('err save in contracts_Webhook', e);
+ console.log('err save in contracts_Webhook', e.message);
}
}));
}
diff --git a/apps/OpenSignServer/index.js b/apps/OpenSignServer/index.js
index 521205fa6..43a4bd591 100644
--- a/apps/OpenSignServer/index.js
+++ b/apps/OpenSignServer/index.js
@@ -13,7 +13,7 @@ import http from 'http';
import formData from 'form-data';
import Mailgun from 'mailgun.js';
import { ApiPayloadConverter } from 'parse-server-api-mail-adapter';
-import S3Adapter from 'parse-server-s3-adapter';
+import S3Adapter from '@parse/s3-files-adapter';
import FSFilesAdapter from 'parse-server-fs-adapter';
import AWS from 'aws-sdk';
import { app as customRoute } from './cloud/customRoute/customApp.js';
@@ -32,6 +32,8 @@ if (process.env.USE_LOCAL !== 'TRUE') {
region: process.env.DO_REGION,
directAccess: true,
preserveFileName: true,
+ presignedUrl: true,
+ presignedUrlExpires: 900,
s3overrides: {
accessKeyId: process.env.DO_ACCESS_KEY_ID,
secretAccessKey: process.env.DO_SECRET_ACCESS_KEY,
diff --git a/apps/OpenSignServer/package-lock.json b/apps/OpenSignServer/package-lock.json
index b3063c413..63b14870e 100644
--- a/apps/OpenSignServer/package-lock.json
+++ b/apps/OpenSignServer/package-lock.json
@@ -9,6 +9,7 @@
"version": "1.4.0",
"license": "MIT",
"dependencies": {
+ "@parse/s3-files-adapter": "^2.2.0",
"aws-sdk": "^2.1581.0",
"axios": "^1.6.8",
"cors": "^2.8.5",
@@ -2560,6 +2561,69 @@
}
}
},
+ "node_modules/@parse/s3-files-adapter": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@parse/s3-files-adapter/-/s3-files-adapter-2.2.0.tgz",
+ "integrity": "sha512-y+d7+AvmRUrROe4kJOF8128yUSxieM53vXQsSaG2gvY9VgPScfpfho0pE7VZ5mLumzxJjmwW6oufiGdgcjgcTA==",
+ "dependencies": {
+ "aws-sdk": "2.1363.0"
+ }
+ },
+ "node_modules/@parse/s3-files-adapter/node_modules/aws-sdk": {
+ "version": "2.1363.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1363.0.tgz",
+ "integrity": "sha512-M2MZZXehgi/EMQv5GlzRkn3TlhoOYHg2cYdSAAqhjv67WaEG50MjaQy5vRvfN1i8XvB24aJFJ5pCrx69TaCaIg==",
+ "dependencies": {
+ "buffer": "4.9.2",
+ "events": "1.1.1",
+ "ieee754": "1.1.13",
+ "jmespath": "0.16.0",
+ "querystring": "0.2.0",
+ "sax": "1.2.1",
+ "url": "0.10.3",
+ "util": "^0.12.4",
+ "uuid": "8.0.0",
+ "xml2js": "0.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@parse/s3-files-adapter/node_modules/buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dependencies": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "node_modules/@parse/s3-files-adapter/node_modules/ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ },
+ "node_modules/@parse/s3-files-adapter/node_modules/uuid": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz",
+ "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@parse/s3-files-adapter/node_modules/xml2js": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
+ "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/@pdf-lib/standard-fonts": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz",
diff --git a/apps/OpenSignServer/package.json b/apps/OpenSignServer/package.json
index 8fd3c1ca6..26b9b9789 100644
--- a/apps/OpenSignServer/package.json
+++ b/apps/OpenSignServer/package.json
@@ -18,6 +18,7 @@
"watch": "nodemon index.js"
},
"dependencies": {
+ "@parse/s3-files-adapter": "^2.2.0",
"aws-sdk": "^2.1581.0",
"axios": "^1.6.8",
"cors": "^2.8.5",