From 86fa0c87aea9d44c12ae951eeae29a895b38db01 Mon Sep 17 00:00:00 2001 From: KrisIsNewxyz Date: Tue, 30 Jul 2024 13:01:06 +0200 Subject: [PATCH 01/15] repair broken conection to mongodb - Update .env.local_dev --- .env.local_dev | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.local_dev b/.env.local_dev index 16206ae9a..969ede16c 100644 --- a/.env.local_dev +++ b/.env.local_dev @@ -20,7 +20,7 @@ appName=open_sign_server # A 12 character long random secret key that allows access to all the data. It is used in Parse dashboard config to view all the data in the database. MASTER_KEY=XnAadwKxxByMr # Mongodb URI to connect to -MONGODB_URI=mongodb://host.docker.internal:27018/OpenSignDB +MONGODB_URI=mongodb://mongo-container:27017/OpenSignDB # Path on which APIs should be mounted. Do not change this. This variable shall be removed & value hardcoded in the source code in coming versions. PARSE_MOUNT=/app # Set it to the URL from where APIs will be accessible to the NodeJS functions, for local development it should be localhost:3000/api/app (use your local port number instead) From 299648b8e04e7f87859ac3612b2e8c92fa51ad79 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Tue, 30 Jul 2024 16:53:36 +0530 Subject: [PATCH 02/15] fix: getaddrinfo ENOTFOUND while creating admin --- apps/OpenSign/src/primitives/ValidateRoute.js | 24 ++++++++++++------- apps/OpenSignServer/Utils.js | 3 ++- .../cloud/customRoute/autoReminder.js | 3 ++- .../cloud/customRoute/googleauth.js | 3 ++- .../cloud/customRoute/uploadFile.js | 4 ++-- .../v1/routes/CreateDocumentWithTemplate.js | 4 ++-- .../v1/routes/createDocumentwithCoordinate.js | 3 ++- .../customRoute/v1/routes/getDocumentList.js | 3 ++- .../customRoute/v1/routes/getTemplateList.js | 3 ++- .../cloud/customRoute/v1/routes/resendMail.js | 4 ++-- .../cloud/parsefunction/AddAdmin.js | 3 ++- .../cloud/parsefunction/AuthLoginAsMail.js | 3 ++- .../cloud/parsefunction/FacebookSign.js | 3 ++- .../cloud/parsefunction/GetTemplate.js | 3 ++- .../cloud/parsefunction/GoogleSign.js | 3 ++- .../cloud/parsefunction/callWebhook.js | 3 ++- .../cloud/parsefunction/createBatchDocs.js | 3 ++- .../cloud/parsefunction/generateApiToken.js | 3 ++- .../cloud/parsefunction/getDocument.js | 3 ++- .../cloud/parsefunction/getDrive.js | 3 ++- .../cloud/parsefunction/getInvoices.js | 3 ++- .../cloud/parsefunction/getPayments.js | 3 ++- .../cloud/parsefunction/getReport.js | 3 ++- .../cloud/parsefunction/getSubscriptions.js | 3 ++- .../cloud/parsefunction/getapitoken.js | 3 ++- .../cloud/parsefunction/pdf/PDF.js | 4 ++-- .../cloud/parsefunction/saveSubscription.js | 3 ++- .../cloud/parsefunction/saveWebhook.js | 3 ++- .../parsefunction/sendMailGmailProvider.js | 18 ++++++++++---- .../cloud/parsefunction/sendMailv3.js | 18 ++++++++++---- .../cloud/parsefunction/ssoSignin.js | 3 ++- .../cloud/parsefunction/usersignup.js | 3 ++- 32 files changed, 99 insertions(+), 52 deletions(-) diff --git a/apps/OpenSign/src/primitives/ValidateRoute.js b/apps/OpenSign/src/primitives/ValidateRoute.js index 2beb48d8b..e7339f532 100644 --- a/apps/OpenSign/src/primitives/ValidateRoute.js +++ b/apps/OpenSign/src/primitives/ValidateRoute.js @@ -20,15 +20,21 @@ const ValidateRoute = () => { })(); }, []); const handlelogout = async () => { - try { - // if (Parse?.User?.current()) { - // Parse?.User?.logOut(); - // } - localStorage.removeItem("accesstoken"); - } catch (err) { - console.log("err ", err); - localStorage.removeItem("accesstoken"); - } + let appdata = localStorage.getItem("userSettings"); + let applogo = localStorage.getItem("appLogo"); + let defaultmenuid = localStorage.getItem("defaultmenuid"); + let PageLanding = localStorage.getItem("PageLanding"); + let baseUrl = localStorage.getItem("baseUrl"); + let appid = localStorage.getItem("parseAppId"); + + localStorage.clear(); + + localStorage.setItem("appLogo", applogo); + localStorage.setItem("defaultmenuid", defaultmenuid); + localStorage.setItem("PageLanding", PageLanding); + localStorage.setItem("userSettings", appdata); + localStorage.setItem("baseUrl", baseUrl); + localStorage.setItem("parseAppId", appid); }; return
{}
; }; diff --git a/apps/OpenSignServer/Utils.js b/apps/OpenSignServer/Utils.js index dcfa1b707..99a92dab2 100644 --- a/apps/OpenSignServer/Utils.js +++ b/apps/OpenSignServer/Utils.js @@ -4,8 +4,9 @@ dotenv.config(); const appId = process.env.APP_ID; const serverUrl = process.env.SERVER_URL; +export const cloudServerUrl = 'http://localhost:8080/app'; export function customAPIurl() { - const url = new URL(process.env.SERVER_URL); + const url = new URL(cloudServerUrl); return url.pathname === '/api/app' ? url.origin + '/api' : url.origin; } diff --git a/apps/OpenSignServer/cloud/customRoute/autoReminder.js b/apps/OpenSignServer/cloud/customRoute/autoReminder.js index 35cd75e04..05fc0cd25 100644 --- a/apps/OpenSignServer/cloud/customRoute/autoReminder.js +++ b/apps/OpenSignServer/cloud/customRoute/autoReminder.js @@ -1,4 +1,5 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; // `replaceMailVaribles` is used to replace variables from mail with there actual values function replaceMailVaribles(subject, body, variables) { @@ -26,7 +27,7 @@ function replaceMailVaribles(subject, body, variables) { async function sendMail(doc, signer) { const subject = `{{sender_name}} has requested you to sign "{{document_title}}"`; const body = `

Hi {{receiver_name}},


We hope this email finds you well. {{sender_name}} has requested you to review and sign "{{document_title}}".

Your signature is crucial to proceed with the next steps as it signifies your agreement and authorization.


{{signing_url}}


If you have any questions or need further clarification regarding the document or the signing process, please contact the sender.


Thanks

Team OpenSign™


`; - const url = `${process.env.SERVER_URL}/functions/sendmailv3`; + const url = `${cloudServerUrl}/functions/sendmailv3`; const headers = { 'Content-Type': 'application/json', 'X-Parse-Application-Id': process.env.APP_ID, diff --git a/apps/OpenSignServer/cloud/customRoute/googleauth.js b/apps/OpenSignServer/cloud/customRoute/googleauth.js index 08b453bd8..595bf8436 100644 --- a/apps/OpenSignServer/cloud/customRoute/googleauth.js +++ b/apps/OpenSignServer/cloud/customRoute/googleauth.js @@ -1,6 +1,7 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; const appId = process.env.APP_ID; -const serverUrl = process.env.SERVER_URL; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; export default async function gooogleauth(request, response) { const code = request.body.code; const baseUrl = new URL(process.env.SERVER_URL); diff --git a/apps/OpenSignServer/cloud/customRoute/uploadFile.js b/apps/OpenSignServer/cloud/customRoute/uploadFile.js index dd1e681a2..70dd1ed29 100644 --- a/apps/OpenSignServer/cloud/customRoute/uploadFile.js +++ b/apps/OpenSignServer/cloud/customRoute/uploadFile.js @@ -3,7 +3,7 @@ import multer from 'multer'; import multerS3 from 'multer-s3'; import aws from 'aws-sdk'; import dotenv from 'dotenv'; -import { useLocal } from '../../Utils.js'; +import { cloudServerUrl, useLocal } from '../../Utils.js'; dotenv.config(); function sanitizeFileName(fileName) { @@ -49,7 +49,7 @@ async function uploadFile(req, res) { const DO_SECRET_ACCESS_KEY = process.env.DO_SECRET_ACCESS_KEY; const DO_SPACE = process.env.DO_SPACE; - const parseBaseUrl = process.env.SERVER_URL; + const parseBaseUrl = cloudServerUrl; //process.env.SERVER_URL; const parseAppId = process.env.APP_ID; let fileStorage; if (useLocal === 'true') { diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js index 758ff7971..513213aa4 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js @@ -1,5 +1,5 @@ import axios from 'axios'; -import { customAPIurl, replaceMailVaribles } from '../../../../Utils.js'; +import { cloudServerUrl, customAPIurl, replaceMailVaribles } from '../../../../Utils.js'; // `sendDoctoWebhook` is used to send res data of document on webhook async function sendDoctoWebhook(doc, WebhookUrl, userId) { @@ -220,7 +220,7 @@ export default async function createDocumentWithTemplate(request, response) { for (let i = 0; i < contactMail.length; i++) { try { const imgPng = 'https://qikinnovation.ams3.digitaloceanspaces.com/logo.png'; - let url = `${process.env.SERVER_URL}/functions/sendmailv3/`; + let url = `${cloudServerUrl}/functions/sendmailv3/`; const headers = { 'Content-Type': 'application/json', 'X-Parse-Application-Id': process.env.APP_ID, diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js index f00161a2b..82f792059 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js @@ -6,6 +6,7 @@ import { saveFileUsage, formatWidgetOptions, sanitizeFileName, + cloudServerUrl, } from '../../../../Utils.js'; // `sendDoctoWebhook` is used to send res data of document on webhook @@ -281,7 +282,7 @@ export default async function createDocumentwithCoordinate(request, response) { for (let i = 0; i < contactMail.length; i++) { try { const imgPng = 'https://qikinnovation.ams3.digitaloceanspaces.com/logo.png'; - let url = `${process.env.SERVER_URL}/functions/sendmailv3/`; + let url = `${cloudServerUrl}/functions/sendmailv3/`; const headers = { 'Content-Type': 'application/json', 'X-Parse-Application-Id': process.env.APP_ID, diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js index 1deae9605..6dcc119a2 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocumentList.js @@ -1,12 +1,13 @@ import axios from 'axios'; import reportJson from '../../../parsefunction/reportsJson.js'; import dotenv from 'dotenv'; +import { cloudServerUrl } from '../../../../Utils.js'; dotenv.config(); export default async function getDocumentList(request, response) { const reqToken = request.headers['x-api-token']; const appId = process.env.APP_ID; - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; if (!reqToken) { return response.status(400).json({ error: 'Please Provide API Token' }); } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js index fb1e1ae74..047db883d 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getTemplateList.js @@ -1,10 +1,11 @@ import axios from 'axios'; import dotenv from 'dotenv'; +import { cloudServerUrl } from '../../../../Utils.js'; dotenv.config(); export default async function getTemplatetList(request, response) { const reqToken = request.headers['x-api-token']; const appId = process.env.APP_ID; - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; if (!reqToken) { return response.status(400).json({ error: 'Please Provide API Token' }); } diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/resendMail.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/resendMail.js index c1df00e8c..c525bb0eb 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/resendMail.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/resendMail.js @@ -1,5 +1,5 @@ import axios from 'axios'; -import { replaceMailVaribles } from '../../../../Utils.js'; +import { cloudServerUrl, replaceMailVaribles } from '../../../../Utils.js'; export default async function resendMail(request, response) { try { @@ -44,7 +44,7 @@ export default async function resendMail(request, response) { if (contact) { try { const imgPng = 'https://qikinnovation.ams3.digitaloceanspaces.com/logo.png'; - let url = `${process.env.SERVER_URL}/functions/sendmailv3/`; + let url = `${cloudServerUrl}/functions/sendmailv3/`; const headers = { 'Content-Type': 'application/json', 'X-Parse-Application-Id': process.env.APP_ID, diff --git a/apps/OpenSignServer/cloud/parsefunction/AddAdmin.js b/apps/OpenSignServer/cloud/parsefunction/AddAdmin.js index 4231b5600..740a0cc07 100644 --- a/apps/OpenSignServer/cloud/parsefunction/AddAdmin.js +++ b/apps/OpenSignServer/cloud/parsefunction/AddAdmin.js @@ -1,5 +1,6 @@ import axios from 'axios'; -const serverUrl = process.env.SERVER_URL; +import { cloudServerUrl } from '../../Utils.js'; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const APPID = process.env.APP_ID; const masterKEY = process.env.MASTER_KEY; async function addTeamAndOrg(extUser) { diff --git a/apps/OpenSignServer/cloud/parsefunction/AuthLoginAsMail.js b/apps/OpenSignServer/cloud/parsefunction/AuthLoginAsMail.js index 5e5d04a53..2eeb63d54 100644 --- a/apps/OpenSignServer/cloud/parsefunction/AuthLoginAsMail.js +++ b/apps/OpenSignServer/cloud/parsefunction/AuthLoginAsMail.js @@ -1,8 +1,9 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; async function AuthLoginAsMail(request) { try { //function for login user using user objectId without touching user's password - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const APPID = process.env.APP_ID; const masterKEY = process.env.MASTER_KEY; diff --git a/apps/OpenSignServer/cloud/parsefunction/FacebookSign.js b/apps/OpenSignServer/cloud/parsefunction/FacebookSign.js index 8b7df821e..fbe520806 100644 --- a/apps/OpenSignServer/cloud/parsefunction/FacebookSign.js +++ b/apps/OpenSignServer/cloud/parsefunction/FacebookSign.js @@ -1,6 +1,7 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; -const serverUrl = process.env.SERVER_URL; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const APPID = process.env.APP_ID; const masterKEY = process.env.MASTER_KEY; diff --git a/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js b/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js index f10a91e4b..cbc739726 100644 --- a/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js +++ b/apps/OpenSignServer/cloud/parsefunction/GetTemplate.js @@ -1,7 +1,8 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; export default async function GetTemplate(request) { - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const templateId = request.params.templateId; const ispublic = request.params.ispublic; diff --git a/apps/OpenSignServer/cloud/parsefunction/GoogleSign.js b/apps/OpenSignServer/cloud/parsefunction/GoogleSign.js index 57a961ce8..6be77239e 100644 --- a/apps/OpenSignServer/cloud/parsefunction/GoogleSign.js +++ b/apps/OpenSignServer/cloud/parsefunction/GoogleSign.js @@ -1,6 +1,7 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; -const serverUrl = process.env.SERVER_URL; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const APPID = process.env.APP_ID; const masterKEY = process.env.MASTER_KEY; diff --git a/apps/OpenSignServer/cloud/parsefunction/callWebhook.js b/apps/OpenSignServer/cloud/parsefunction/callWebhook.js index eab11e022..4074dd623 100644 --- a/apps/OpenSignServer/cloud/parsefunction/callWebhook.js +++ b/apps/OpenSignServer/cloud/parsefunction/callWebhook.js @@ -1,10 +1,11 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; export default async function callWebhook(request) { const event = request.params.event; const body = request.params.body; const docId = body.objectId; const contactId = request.params.contactId; - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const appId = process.env.APP_ID; const userRes = await axios.get(serverUrl + '/users/me', { headers: { diff --git a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js index d04ece47b..3cb789e19 100644 --- a/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js +++ b/apps/OpenSignServer/cloud/parsefunction/createBatchDocs.js @@ -1,6 +1,7 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; -const serverUrl = process.env.SERVER_URL; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const appId = process.env.APP_ID; async function sendMail(document, sessionToken) { diff --git a/apps/OpenSignServer/cloud/parsefunction/generateApiToken.js b/apps/OpenSignServer/cloud/parsefunction/generateApiToken.js index 8f39ccfdb..a7ac42524 100644 --- a/apps/OpenSignServer/cloud/parsefunction/generateApiToken.js +++ b/apps/OpenSignServer/cloud/parsefunction/generateApiToken.js @@ -1,7 +1,8 @@ import { generateApiKey } from 'generate-api-key'; import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; export default async function generateApiToken(request) { - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; try { const userRes = await axios.get(serverUrl + '/users/me', { headers: { diff --git a/apps/OpenSignServer/cloud/parsefunction/getDocument.js b/apps/OpenSignServer/cloud/parsefunction/getDocument.js index 4556d1271..c7b2d07d2 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getDocument.js +++ b/apps/OpenSignServer/cloud/parsefunction/getDocument.js @@ -1,7 +1,8 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; export default async function getDocument(request) { - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const docId = request.params.docId; try { diff --git a/apps/OpenSignServer/cloud/parsefunction/getDrive.js b/apps/OpenSignServer/cloud/parsefunction/getDrive.js index 524b2f2b2..79bb5036d 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getDrive.js +++ b/apps/OpenSignServer/cloud/parsefunction/getDrive.js @@ -1,6 +1,7 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; export default async function getDrive(request) { - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const appId = process.env.APP_ID; const limit = request.params.limit; const skip = request.params.skip; diff --git a/apps/OpenSignServer/cloud/parsefunction/getInvoices.js b/apps/OpenSignServer/cloud/parsefunction/getInvoices.js index e5c63c8e4..283abe66d 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getInvoices.js +++ b/apps/OpenSignServer/cloud/parsefunction/getInvoices.js @@ -1,5 +1,6 @@ import axios from 'axios'; -const serverUrl = process.env.SERVER_URL; +import { cloudServerUrl } from '../../Utils.js'; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const appId = process.env.APP_ID; export default async function getInvoices(request) { const limit = request.params.limit || 100; diff --git a/apps/OpenSignServer/cloud/parsefunction/getPayments.js b/apps/OpenSignServer/cloud/parsefunction/getPayments.js index 1cad03dd1..2c52178b4 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getPayments.js +++ b/apps/OpenSignServer/cloud/parsefunction/getPayments.js @@ -1,5 +1,6 @@ import axios from 'axios'; -const serverUrl = process.env.SERVER_URL; +import { cloudServerUrl } from '../../Utils.js'; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const appId = process.env.APP_ID; export default async function getPayments(request) { const limit = request.params.limit || 100; diff --git a/apps/OpenSignServer/cloud/parsefunction/getReport.js b/apps/OpenSignServer/cloud/parsefunction/getReport.js index 8f7aec1e4..12b352644 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getReport.js +++ b/apps/OpenSignServer/cloud/parsefunction/getReport.js @@ -1,3 +1,4 @@ +import { cloudServerUrl } from '../../Utils.js'; import reportJson from './reportsJson.js'; import axios from 'axios'; @@ -6,7 +7,7 @@ export default async function getReport(request) { const limit = request.params.limit; const skip = request.params.skip; - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const appId = process.env.APP_ID; const masterKey = process.env.MASTER_KEY; try { diff --git a/apps/OpenSignServer/cloud/parsefunction/getSubscriptions.js b/apps/OpenSignServer/cloud/parsefunction/getSubscriptions.js index dd3d06f75..81124fa15 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getSubscriptions.js +++ b/apps/OpenSignServer/cloud/parsefunction/getSubscriptions.js @@ -1,5 +1,6 @@ import axios from 'axios'; -const serverUrl = process.env.SERVER_URL; +import { cloudServerUrl } from '../../Utils.js'; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const appId = process.env.APP_ID; export default async function getSubscription(request) { const extUserId = request.params.extUserId || ''; diff --git a/apps/OpenSignServer/cloud/parsefunction/getapitoken.js b/apps/OpenSignServer/cloud/parsefunction/getapitoken.js index 192a1d0fd..ac78e8ab0 100644 --- a/apps/OpenSignServer/cloud/parsefunction/getapitoken.js +++ b/apps/OpenSignServer/cloud/parsefunction/getapitoken.js @@ -1,6 +1,7 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; export default async function getapitoken(request) { - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; try { const userRes = await axios.get(serverUrl + '/users/me', { headers: { diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js index fc04b5efc..68ed4d06d 100644 --- a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js +++ b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js @@ -4,9 +4,9 @@ import { SignPdf } from '@signpdf/signpdf'; import { P12Signer } from '@signpdf/signer-p12'; import { pdflibAddPlaceholder } from '@signpdf/placeholder-pdf-lib'; import { PDFDocument } from 'pdf-lib'; -import { replaceMailVaribles, saveFileUsage } from '../../../Utils.js'; +import { cloudServerUrl, replaceMailVaribles, saveFileUsage } from '../../../Utils.js'; import GenerateCertificate from './GenerateCertificate.js'; -const serverUrl = process.env.SERVER_URL; +const serverUrl = cloudServerUrl; // process.env.SERVER_URL; const APPID = process.env.APP_ID; const masterKEY = process.env.MASTER_KEY; const eSignName = 'opensign'; diff --git a/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js b/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js index 2771e81c4..b2a9b439a 100644 --- a/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js +++ b/apps/OpenSignServer/cloud/parsefunction/saveSubscription.js @@ -1,6 +1,7 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; export default async function saveSubscription(request) { - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const appId = process.env.APP_ID; const subscription = request.params.subscription; const SubscriptionId = subscription.data.subscription.subscription_id; diff --git a/apps/OpenSignServer/cloud/parsefunction/saveWebhook.js b/apps/OpenSignServer/cloud/parsefunction/saveWebhook.js index 1beff7c4b..30c99e3b0 100644 --- a/apps/OpenSignServer/cloud/parsefunction/saveWebhook.js +++ b/apps/OpenSignServer/cloud/parsefunction/saveWebhook.js @@ -1,6 +1,7 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; export default async function savewebhook(request) { - const serverUrl = process.env.SERVER_URL; + const serverUrl = cloudServerUrl; //process.env.SERVER_URL; try { const userRes = await axios.get(serverUrl + '/users/me', { headers: { diff --git a/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js b/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js index 35dc0fc0b..28babd02c 100644 --- a/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js +++ b/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js @@ -2,6 +2,7 @@ import axios from 'axios'; import { google } from 'googleapis'; import fs from 'node:fs'; import https from 'https'; +import http from 'http'; const clientId = process.env.GOOGLE_CLIENT_ID; const clientSecret = process.env.GOOGLE_CLIENT_SECRET; // Function to create a Gmail client @@ -34,10 +35,17 @@ const makeEmail = async (to, from, subject, html, url, pdfName) => { let Pdf = fs.createWriteStream('test.pdf'); const writeToLocalDisk = () => { return new Promise((resolve, reject) => { - https.get(url, async function (response) { - response.pipe(Pdf); - response.on('end', () => resolve('success')); - }); + if (useLocal !== 'true') { + https.get(url, async function (response) { + response.pipe(Pdf); + response.on('end', () => resolve('success')); + }); + } else { + http.get(url, async function (response) { + response.pipe(Pdf); + response.on('end', () => resolve('success')); + }); + } }); }; // `writeToLocalDisk` is used to create pdf file from doc url @@ -130,7 +138,7 @@ export default async function sendMailGmailProvider(_extRes, template) { raw: email, }, }); - // console.log('response ', response); + // console.log('response ', response); return { code: 200, message: 'Email sent successfully' }; } catch (error) { diff --git a/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js b/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js index e76f3533d..dca27ea65 100644 --- a/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js +++ b/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js @@ -1,8 +1,9 @@ import fs from 'node:fs'; import https from 'https'; +import http from 'http'; import formData from 'form-data'; import Mailgun from 'mailgun.js'; -import { smtpenable, smtpsecure, updateMailCount } from '../../Utils.js'; +import { smtpenable, smtpsecure, updateMailCount, useLocal } from '../../Utils.js'; import sendMailGmailProvider from './sendMailGmailProvider.js'; import { createTransport } from 'nodemailer'; async function sendMailProvider(req) { @@ -32,10 +33,17 @@ async function sendMailProvider(req) { let Pdf = fs.createWriteStream('test.pdf'); const writeToLocalDisk = () => { return new Promise((resolve, reject) => { - https.get(req.params.url, async function (response) { - response.pipe(Pdf); - response.on('end', () => resolve('success')); - }); + if (useLocal !== 'true') { + https.get(req.params.url, async function (response) { + response.pipe(Pdf); + response.on('end', () => resolve('success')); + }); + } else { + http.get(req.params.url, async function (response) { + response.pipe(Pdf); + response.on('end', () => resolve('success')); + }); + } }); }; // `writeToLocalDisk` is used to create pdf file from doc url diff --git a/apps/OpenSignServer/cloud/parsefunction/ssoSignin.js b/apps/OpenSignServer/cloud/parsefunction/ssoSignin.js index 61ec53173..acbed765e 100644 --- a/apps/OpenSignServer/cloud/parsefunction/ssoSignin.js +++ b/apps/OpenSignServer/cloud/parsefunction/ssoSignin.js @@ -1,6 +1,7 @@ import axios from 'axios'; +import { cloudServerUrl } from '../../Utils.js'; -const serverUrl = process.env.SERVER_URL; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const APPID = process.env.APP_ID; const masterKEY = process.env.MASTER_KEY; const clientUrl = process.env.PUBLIC_URL; diff --git a/apps/OpenSignServer/cloud/parsefunction/usersignup.js b/apps/OpenSignServer/cloud/parsefunction/usersignup.js index 4140f1c64..35057ba83 100644 --- a/apps/OpenSignServer/cloud/parsefunction/usersignup.js +++ b/apps/OpenSignServer/cloud/parsefunction/usersignup.js @@ -1,5 +1,6 @@ import axios from 'axios'; -const serverUrl = process.env.SERVER_URL; +import { cloudServerUrl } from '../../Utils.js'; +const serverUrl = cloudServerUrl; //process.env.SERVER_URL; const APPID = process.env.APP_ID; const masterKEY = process.env.MASTER_KEY; From 23da4be6b192d495e92596e009cb1632a1025e09 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Tue, 30 Jul 2024 18:15:16 +0530 Subject: [PATCH 03/15] fix: err invalid protcol while sending file in mail --- .../cloud/parsefunction/sendMailGmailProvider.js | 3 ++- apps/OpenSignServer/cloud/parsefunction/sendMailv3.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js b/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js index 28babd02c..7aacca192 100644 --- a/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js +++ b/apps/OpenSignServer/cloud/parsefunction/sendMailGmailProvider.js @@ -27,6 +27,7 @@ const refreshAccessToken = async refreshToken => { // Function to create a raw email message const makeEmail = async (to, from, subject, html, url, pdfName) => { + const protocol = new URL(process.env.SERVER_URL); const htmlContent = html; const boundary = 'boundary_' + Date.now().toString(16); let str; @@ -35,7 +36,7 @@ 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') { + if (useLocal !== 'true' && protocol.hostname !== 'localhost') { 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 dca27ea65..eca34a922 100644 --- a/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js +++ b/apps/OpenSignServer/cloud/parsefunction/sendMailv3.js @@ -7,6 +7,7 @@ import { smtpenable, smtpsecure, updateMailCount, useLocal } from '../../Utils.j import sendMailGmailProvider from './sendMailGmailProvider.js'; import { createTransport } from 'nodemailer'; async function sendMailProvider(req) { + const protocol = new URL(process.env.SERVER_URL); try { let transporterSMTP; let mailgunClient; @@ -33,7 +34,7 @@ async function sendMailProvider(req) { let Pdf = fs.createWriteStream('test.pdf'); const writeToLocalDisk = () => { return new Promise((resolve, reject) => { - if (useLocal !== 'true') { + if (useLocal !== 'true' && protocol.hostname !== 'localhost') { https.get(req.params.url, async function (response) { response.pipe(Pdf); response.on('end', () => resolve('success')); From 275167c0c4fa7809835867efef55f6d297cd1ef0 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Wed, 31 Jul 2024 16:56:11 +0530 Subject: [PATCH 04/15] fix: all types of text widget background color issues in mobile dark mode. --- apps/OpenSign/src/components/pdf/PlaceholderType.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/PlaceholderType.js b/apps/OpenSign/src/components/pdf/PlaceholderType.js index 546e83a65..1084614db 100644 --- a/apps/OpenSign/src/components/pdf/PlaceholderType.js +++ b/apps/OpenSign/src/components/pdf/PlaceholderType.js @@ -15,7 +15,7 @@ import "../../styles/signature.css"; import RegexParser from "regex-parser"; import { emailRegex } from "../../constant/const"; const textWidgetCls = - "w-full h-full md:min-w-full md:min-h-full z-[999] text-[12px] rounded-[2px] border-[1px] border-[#007bff] overflow-hidden resize-none outline-none text-base-content item-center whitespace-pre-wrap"; + "w-full h-full md:min-w-full md:min-h-full z-[999] text-[12px] rounded-[2px] border-[1px] border-[#007bff] overflow-hidden resize-none outline-none text-base-content item-center whitespace-pre-wrap bg-white"; const selectWidgetCls = "w-full h-full absolute left-0 top-0 border-[1px] border-[#007bff] rounded-[2px] focus:outline-none text-base-content"; function PlaceholderType(props) { @@ -430,7 +430,7 @@ function PlaceholderType(props) { case "dropdown": return props.data?.signerObjId === props.signerObjId ? ( Date: Fri, 2 Aug 2024 16:22:44 +0530 Subject: [PATCH 15/15] fix: error handling of signpdf function --- apps/OpenSign/src/components/pdf/PdfHeader.js | 22 +- apps/OpenSign/src/constant/Utils.js | 63 ++-- apps/OpenSign/src/pages/PdfRequestFiles.js | 341 +++++++++--------- apps/OpenSign/src/pages/SignyourselfPdf.js | 64 ++-- .../OpenSign/src/pages/TemplatePlaceholder.js | 22 +- 5 files changed, 232 insertions(+), 280 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/PdfHeader.js b/apps/OpenSign/src/components/pdf/PdfHeader.js index c12085814..b2d01d3b3 100644 --- a/apps/OpenSign/src/components/pdf/PdfHeader.js +++ b/apps/OpenSign/src/components/pdf/PdfHeader.js @@ -414,19 +414,15 @@ function Header({ ) : isPublicTemplate ? ( - <> -
- -
- +
+ +
) : (

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + - senderEmail + - " directly.If you think this email is inappropriate or spam, you may file a complaint with OpenSign™ here.

" - }; - await axios.post(url, params, { - headers: headers - }); - } catch (error) { - console.log("error", error); + const newIndex = index + 1; + const usermail = { + Email: pdfDetails?.[0]?.Placeholders[newIndex]?.email || "" + }; + const user = usermail?.Email + ? usermail + : pdfDetails?.[0]?.Signers[newIndex]; + if (sendmail !== "false" && sendInOrder) { + const requestBody = pdfDetails?.[0]?.RequestBody; + const requestSubject = pdfDetails?.[0]?.RequestSubject; + if (user) { + const expireDate = pdfDetails?.[0].ExpiryDate.iso; + const newDate = new Date(expireDate); + const localExpireDate = newDate.toLocaleDateString( + "en-US", + { + day: "numeric", + month: "long", + year: "numeric" } + ); + let senderEmail = pdfDetails?.[0].ExtUserPtr.Email; + let senderPhone = pdfDetails?.[0]?.ExtUserPtr?.Phone; + const senderName = `${pdfDetails?.[0].ExtUserPtr.Name}`; + + try { + const imgPng = + "https://qikinnovation.ams3.digitaloceanspaces.com/logo.png"; + let url = `${localStorage.getItem( + "baseUrl" + )}functions/sendmailv3`; + const headers = { + "Content-Type": "application/json", + "X-Parse-Application-Id": + localStorage.getItem("parseAppId"), + sessionToken: localStorage.getItem("accesstoken") + }; + const objectId = user?.objectId; + const hostUrl = window.location.origin; + //encode this url value `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` to base64 using `btoa` function + let encodeBase64; + if (objectId) { + encodeBase64 = btoa( + `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` + ); + } else { + encodeBase64 = btoa( + `${pdfDetails?.[0].objectId}/${user.Email}` + ); + } + const hostPublicUrl = isStaging + ? "https://staging-app.opensignlabs.com" + : "https://app.opensignlabs.com"; + let signPdf = props?.templateId + ? `${hostPublicUrl}/login/${encodeBase64}` + : `${hostUrl}/login/${encodeBase64}`; + const openSignUrl = + "https://www.opensignlabs.com/contact-us"; + const orgName = pdfDetails[0]?.ExtUserPtr.Company + ? pdfDetails[0].ExtUserPtr.Company + : ""; + const themeBGcolor = themeColor; + let replaceVar; + if (requestBody && requestSubject && isSubscribed) { + const replacedRequestBody = requestBody.replace( + /"/g, + "'" + ); + const htmlReqBody = + "" + + replacedRequestBody + + " "; + + const variables = { + document_title: pdfDetails?.[0].Name, + sender_name: senderName, + sender_mail: senderEmail, + sender_phone: senderPhone, + receiver_name: user.Name, + receiver_email: user.Email, + receiver_phone: user.Phone, + expiry_date: localExpireDate, + company_name: orgName, + signing_url: `Sign here` + }; + replaceVar = replaceMailVaribles( + requestSubject, + htmlReqBody, + variables + ); + } + + let params = { + mailProvider: activeMailAdapter, + extUserId: extUserId, + recipient: user.Email, + subject: requestSubject + ? replaceVar?.subject + : `${pdfDetails?.[0].ExtUserPtr.Name} has requested you to sign "${pdfDetails?.[0].Name}"`, + from: senderEmail, + html: requestBody + ? replaceVar?.body + : "

Digital Signature Request

" + + pdfDetails?.[0].ExtUserPtr.Name + + " has requested you to review and sign " + + pdfDetails?.[0].Name + + ".

Sender " + + senderEmail + + "
Organization " + + orgName + + "
Expires on " + + localExpireDate + + "

This is an automated email from OpenSign™. For any queries regarding this email, please contact the sender " + + senderEmail + + " directly.If you think this email is inappropriate or spam, you may file a complaint with OpenSign™ here.

" + }; + await axios.post(url, params, { + headers: headers + }); + } catch (error) { + console.log("error", error); } } - } else { - setIsAlert({ - isShow: true, - alertMessage: "something went wrong" - }); } - } catch (err) { - setIsAlert({ - isShow: true, - alertMessage: "something went wrong" - }); + } else { + setIsUiLoading(false); + setIsAlert({ isShow: true, alertMessage: resSign.message }); } } catch (err) { setIsUiLoading(false); @@ -1657,26 +1645,19 @@ function PdfRequestFiles(props) { requestSignTourFunction()} { - setIsAlert({ - isShow: false, - alertMessage: "" - }); - }} + title={"Alert"} + handleClose={() => + setIsAlert({ isShow: false, alertMessage: "" }) + } >

{isAlert.alertMessage}

-
diff --git a/apps/OpenSign/src/pages/SignyourselfPdf.js b/apps/OpenSign/src/pages/SignyourselfPdf.js index 4f81bd83d..93b9591e7 100644 --- a/apps/OpenSign/src/pages/SignyourselfPdf.js +++ b/apps/OpenSign/src/pages/SignyourselfPdf.js @@ -710,15 +710,28 @@ function SignYourSelf() { setIsUiLoading(false); if (err && err.message.includes("is encrypted.")) { setIsAlert({ + header: "Error", isShow: true, alertMessage: `Currently encrypted pdf files are not supported.` }); } else { - console.log("err in signing", err); - setIsAlert({ - isShow: true, - alertMessage: `Something went wrong.` - }); + console.log("err in signing", err.message); + if ( + err.message === + "PKCS#12 MAC could not be verified. Invalid password?" + ) { + setIsAlert({ + header: "Error", + isShow: true, + alertMessage: `PFX file password is invalid.` + }); + } else { + setIsAlert({ + header: "Error", + isShow: true, + alertMessage: `Something went wrong.` + }); + } } } } @@ -726,6 +739,7 @@ function SignYourSelf() { console.log("err in embedselfsign ", err); setIsUiLoading(false); setIsAlert({ + header: "Error", isShow: true, alertMessage: "something went wrong, please try again later." }); @@ -776,34 +790,19 @@ function SignYourSelf() { //remove suffiix of base64 const suffixbase64 = getNewse64 && getNewse64.split(",").pop(); - let singleSign = { + const params = { pdfFile: base64Url, docId: documentId, isCustomCompletionMail: isCustomCompletionMail, mailProvider: activeMailAdapter, signature: suffixbase64 }; - - await axios - .post(`${localStorage.getItem("baseUrl")}functions/signPdf`, singleSign, { - headers: { - "Content-Type": "application/json", - "X-Parse-Application-Id": localStorage.getItem("parseAppId"), - // sessionToken: localStorage.getItem("accesstoken") - "X-Parse-Session-Token": localStorage.getItem("accesstoken") - } - }) - .then((Listdata) => { - const json = Listdata.data; - - setPdfUrl(json.result.data); - if (json.result.data) { - getDocumentDetails(false); - } - }) - .catch((err) => { - console.log("axois err ", err); - }); + const resSignPdf = await Parse.Cloud.run("signPdf", params); + if (resSignPdf) { + const signedpdf = JSON.parse(JSON.stringify(resSignPdf)); + setPdfUrl(signedpdf); + getDocumentDetails(false); + } }; //function for save x and y position and show signature tab on that position @@ -1230,16 +1229,13 @@ function SignYourSelf() { setZoomPercent={setZoomPercent} zoomPercent={zoomPercent} /> -
+
{ - setIsAlert({ - isShow: false, - alertMessage: "" - }); - }} + handleClose={() => + setIsAlert({ isShow: false, alertMessage: "" }) + } >

{isAlert.alertMessage}

diff --git a/apps/OpenSign/src/pages/TemplatePlaceholder.js b/apps/OpenSign/src/pages/TemplatePlaceholder.js index e96cab49d..68e39dfc7 100644 --- a/apps/OpenSign/src/pages/TemplatePlaceholder.js +++ b/apps/OpenSign/src/pages/TemplatePlaceholder.js @@ -1317,7 +1317,7 @@ const TemplatePlaceholder = () => { setZoomPercent={setZoomPercent} zoomPercent={zoomPercent} /> -
+
{/* this modal is used show alert set placeholder for all signers before send mail */} { {currentEmail.length > 0 && ( <>
) : ( -
+
{
)} -