From b0c73bc63e038c4ddd4fdc48e33e10f79b6e0df6 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs <93375423+prafull-opensignlabs@users.noreply.github.com> Date: Thu, 22 Feb 2024 18:27:35 +0530 Subject: [PATCH 01/20] Update Docker.yml --- .github/workflows/Docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Docker.yml b/.github/workflows/Docker.yml index f61d435ce..bfee0f645 100644 --- a/.github/workflows/Docker.yml +++ b/.github/workflows/Docker.yml @@ -2,7 +2,7 @@ name: ci on: push: branches: - - 'main' + - 'staging' jobs: docker: From 761925fcedcae31db7d153c4ac7b1e978589eb93 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Sun, 5 May 2024 18:25:50 +0530 Subject: [PATCH 02/20] fix: login issue --- apps/OpenSign/src/components/LoginGoogle.js | 6 +++--- apps/OpenSign/src/pages/Login.js | 24 +++++++++++++++------ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/apps/OpenSign/src/components/LoginGoogle.js b/apps/OpenSign/src/components/LoginGoogle.js index 96e97c1b0..469352b52 100644 --- a/apps/OpenSign/src/components/LoginGoogle.js +++ b/apps/OpenSign/src/components/LoginGoogle.js @@ -115,8 +115,8 @@ const GoogleSignInBtn = ({ // console.log("payload ", payload); if (payload && payload.sessiontoken) { // setThirdpartyLoader(true); - const billingDate = - extRes.get("Next_billing_date") && extRes.get("Next_billing_date"); + // const billingDate = + // extRes.get("Next_billing_date") && extRes.get("Next_billing_date"); // console.log("billingDate expired", billingDate > new Date()); const LocalUserDetails = { name: details.Name, @@ -125,7 +125,7 @@ const GoogleSignInBtn = ({ company: extRes.get("Company") }; localStorage.setItem("userDetails", JSON.stringify(LocalUserDetails)); - thirdpartyLoginfn(payload.sessiontoken, billingDate); + thirdpartyLoginfn(payload.sessiontoken); } return { msg: "exist" }; } else { diff --git a/apps/OpenSign/src/pages/Login.js b/apps/OpenSign/src/pages/Login.js index 2b050dab1..a2e4b401c 100644 --- a/apps/OpenSign/src/pages/Login.js +++ b/apps/OpenSign/src/pages/Login.js @@ -422,7 +422,7 @@ function Login() { alert("Somenthing went wrong, please try again later!"); } }; - const thirdpartyLoginfn = async (sessionToken, billingDate) => { + const thirdpartyLoginfn = async (sessionToken) => { const baseUrl = localStorage.getItem("baseUrl"); const parseAppId = localStorage.getItem("parseAppId"); const res = await axios.get(baseUrl + "users/me", { @@ -521,7 +521,7 @@ function Login() { await Parse.Cloud.run("getUserDetails", { email: currentUser.get("email") }).then( - (result) => { + async (result) => { let tenentInfo = []; const results = [result]; if (results) { @@ -571,7 +571,7 @@ function Login() { setState({ ...state, loading: false }); navigate("/"); } else { - extendedInfo.forEach((x) => { + extendedInfo.forEach(async (x) => { if (x.TenantId) { let obj = { tenentId: x.TenantId.objectId, @@ -608,8 +608,13 @@ function Login() { setThirdpartyLoader(false); setState({ ...state, loading: false }); if (isEnableSubscription) { - if (billingDate) { - if (billingDate > new Date()) { + const res = await fetchSubscription(); + const freeplan = res.plan; + const billingDate = res.billingDate; + if (freeplan === "freeplan") { + navigate(redirectUrl); + } else if (billingDate) { + if (new Date(billingDate) > new Date()) { localStorage.removeItem("userDetails"); navigate(redirectUrl); } else { @@ -644,8 +649,13 @@ function Login() { setState({ ...state, loading: false }); setThirdpartyLoader(false); if (isEnableSubscription) { - if (billingDate) { - if (billingDate > new Date()) { + const res = await fetchSubscription(); + const freeplan = res.plan; + const billingDate = res.billingDate; + if (freeplan === "freeplan") { + navigate(redirectUrl); + } else if (billingDate) { + if (new Date(billingDate) > new Date()) { localStorage.removeItem("userDetails"); // Redirect to the appropriate URL after successful login navigate(redirectUrl); From 3a28b1cdd7ec132ab675af6d0cb8a74d5d9bb295 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Mon, 6 May 2024 18:51:47 +0530 Subject: [PATCH 03/20] fix: encode in base64 of guest signing url and decode it in guest login page --- apps/OpenSign/src/App.js | 4 ++ apps/OpenSign/src/pages/GuestLogin.js | 39 +++++++++++++------ apps/OpenSign/src/pages/PdfRequestFiles.js | 16 +++++--- apps/OpenSign/src/pages/PlaceHolderSign.js | 25 +++++------- .../src/primitives/GetReportDisplay.js | 16 +++++--- 5 files changed, 63 insertions(+), 37 deletions(-) diff --git a/apps/OpenSign/src/App.js b/apps/OpenSign/src/App.js index 929008576..40bebb3de 100644 --- a/apps/OpenSign/src/App.js +++ b/apps/OpenSign/src/App.js @@ -109,6 +109,10 @@ function App() { path="/login/:id/:userMail/:contactBookId/:serverUrl" element={} /> + } + /> } /> { handleServerUrl(); @@ -36,14 +38,29 @@ function GuestLogin() { setAppLogo(logo); } - //split url in array from '&' localStorage.clear(); - const checkSplit = serverUrl.split("&"); - const server = checkSplit[0]; - const parseId = checkSplit[1]; - const appName = checkSplit[2]; + let parseId, appName, newServer; + //first condition is used to handle old route data url that already save + if (id) { + //split url in array from '&' + const checkSplit = serverUrl.split("&"); + const server = checkSplit[0]; + parseId = checkSplit[1]; + appName = checkSplit[2]; + newServer = server.replaceAll("%2F", "/"); + setEmail(userMail); + } else { + parseId = appInfo.appId; + newServer = `${appInfo.baseUrl}/`; + appName = appInfo.appname; + const decodebase64 = atob(base64url); + //split url in array from '/' + const checkSplit = decodebase64.split("/"); + setEmail(checkSplit[1]); + setDocumentId(checkSplit[0]); + setContactId(checkSplit[2]); + } - const newServer = server.replaceAll("%2F", "/"); localStorage.setItem("baseUrl", newServer); localStorage.setItem("parseAppId", parseId); localStorage.setItem("_appName", appName); @@ -74,7 +91,7 @@ function GuestLogin() { }; let body = { email: email.toString(), - docId: id + docId: documentId }; let Otp = await axios.post(url, body, { headers: headers }); @@ -137,7 +154,7 @@ function GuestLogin() { //save isGuestSigner true in local to handle login flow header in mobile view localStorage.setItem("isGuestSigner", true); setLoading(false); - navigate(`/load/recipientSignPdf/${id}/${contactBookId}`); + navigate(`/load/recipientSignPdf/${documentId}/${contactId}`); } } catch (error) { console.log("err ", error); diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 4b4cb0781..421e32c17 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -741,14 +741,18 @@ function PdfRequestFiles() { localStorage.getItem("parseAppId"), sessionToken: localStorage.getItem("accesstoken") }; - const serverUrl = localStorage.getItem("baseUrl"); - const newServer = serverUrl.replaceAll("/", "%2F"); + // const serverUrl = localStorage.getItem("baseUrl"); + // const newServer = serverUrl.replaceAll("/", "%2F"); const objectId = user.objectId; - const serverParams = `${newServer}&${localStorage.getItem( - "parseAppId" - )}&${localStorage.getItem("_appName")}`; + // const serverParams = `${newServer}&${localStorage.getItem( + // "parseAppId" + // )}&${localStorage.getItem("_appName")}`; const hostUrl = window.location.origin; - let signPdf = `${hostUrl}/login/${pdfDetails?.[0].objectId}/${user.Email}/${objectId}/${serverParams}`; + const encodeBase64 = btoa( + `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` + ); + let signPdf = `${hostUrl}/login/${encodeBase64}`; + // let signPdf = `${hostUrl}/login/${pdfDetails?.[0].objectId}/${user.Email}/${objectId}/${serverParams}`; const openSignUrl = "https://www.opensignlabs.com/contact-us"; const orgName = pdfDetails[0]?.ExtUserPtr.Company diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 1eaddc43c..516ffa68c 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -251,7 +251,6 @@ function PlaceHolderSign() { navigate(`/subscription`); } } - //function for get document details const getDocumentDetails = async () => { fetchTenantDetails(); @@ -968,15 +967,13 @@ function PlaceHolderSign() { const shareLinkList = []; let signerMail = signersdata; for (let i = 0; i < signerMail.length; i++) { - const serverUrl = localStorage.getItem("baseUrl"); - const newServer = serverUrl.replaceAll("/", "%2F"); const objectId = signerMail[i].objectId; - const serverParams = `${newServer}&${localStorage.getItem( - "parseAppId" - )}&${localStorage.getItem("_appName")}`; - const hostUrl = window.location.origin; - let signPdf = `${hostUrl}/login/${pdfDetails?.[0].objectId}/${signerMail[i].Email}/${objectId}/${serverParams}`; + //convert this url documentId/signersEmail/signerObjId base64 and send url + const encodeBase64 = btoa( + `${pdfDetails?.[0].objectId}/${signerMail[i].Email}/${objectId}` + ); + let signPdf = `${hostUrl}/login/${encodeBase64}`; shareLinkList.push({ signerEmail: signerMail[i].Email, url: signPdf }); } return shareLinkList.map((data, ind) => { @@ -1050,15 +1047,13 @@ function PlaceHolderSign() { "X-Parse-Application-Id": localStorage.getItem("parseAppId"), sessionToken: localStorage.getItem("accesstoken") }; - const serverUrl = localStorage.getItem("baseUrl"); - const newServer = serverUrl.replaceAll("/", "%2F"); const objectId = signerMail[i].objectId; - const serverParams = `${newServer}&${localStorage.getItem( - "parseAppId" - )}&${localStorage.getItem("_appName")}`; - const hostUrl = window.location.origin; - let signPdf = `${hostUrl}/login/${pdfDetails?.[0].objectId}/${signerMail[i].Email}/${objectId}/${serverParams}`; + //convert this url documentId/signersEmail/signerObjId base64 and send url + const encodeBase64 = btoa( + `${pdfDetails?.[0].objectId}/${signerMail[i].Email}/${objectId}` + ); + let signPdf = `${hostUrl}/login/${encodeBase64}`; const openSignUrl = "https://www.opensignlabs.com/"; const orgName = pdfDetails[0]?.ExtUserPtr.Company ? pdfDetails[0].ExtUserPtr.Company diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index 8064e7382..da8ed1d95 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -286,13 +286,19 @@ const ReportTable = (props) => { const handleShare = (item) => { setActLoader({ [item.objectId]: true }); const host = window.location.origin; - const serverUrl = process.env.REACT_APP_SERVERURL - ? process.env.REACT_APP_SERVERURL - : window.location.origin + "/api/app"; - const baseURL = serverUrl.replace(/\//g, "%2F"); + // const serverUrl = process.env.REACT_APP_SERVERURL + // ? process.env.REACT_APP_SERVERURL + // : window.location.origin + "/api/app"; + // const baseURL = serverUrl.replace(/\//g, "%2F"); + + const getUrl = (x) => { + const encodeBase64 = btoa(`${item.objectId}/${x.Email}/${x.objectId}`); + return `${host}/login/${encodeBase64}`; + }; + const urls = item.Signers.map((x) => ({ email: x.Email, - url: `${host}/login/${item.objectId}/${x.Email}/${x.objectId}/${baseURL}%2F&opensign&contracts` + url: getUrl(x) })); setShareUrls(urls); setIsShare({ [item.objectId]: true }); From 6afa97a76bed44d1a0b7c3437e6123810cdcf7fc Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Mon, 6 May 2024 18:54:07 +0530 Subject: [PATCH 04/20] fix: encode in base64 of guest signing url and decode it in guest login page --- .../customRoute/v1/routes/CreateDocumentWithTemplate.js | 8 +++++--- .../customRoute/v1/routes/createDocumentwithCoordinate.js | 7 +++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js index b3b6f2179..bc5343487 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js @@ -217,9 +217,10 @@ export default async function createDocumentWithTemplate(request, response) { }; const objectId = contactMail[i].contactPtr.objectId; - const hostUrl = baseUrl.origin; - let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`; + // let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`; + const encodeBase64 = btoa(`${res.id}/${contactMail[i].email}/${objectId}`); + let signPdf = `${hostUrl}/login/${encodeBase64}`; const openSignUrl = 'https://www.opensignlabs.com/contact-us'; const orgName = template.ExtUserPtr.Company ? template.ExtUserPtr.Company : ''; const themeBGcolor = '#47a3ad'; @@ -316,11 +317,12 @@ export default async function createDocumentWithTemplate(request, response) { properties: { response_code: 200 }, }); } + const encodeBase64 = btoa(`${res.id}/${x.email}/${x.contactPtr.objectId}`); return response.json({ objectId: res.id, signurl: contact.map(x => ({ email: x.email, - url: `${baseUrl.origin}/login/${res.id}/${x.email}/${x.contactPtr.objectId}/${serverParams}`, + url: `${baseUrl.origin}/login/${encodeBase64}`, })), message: 'Document sent successfully!', }); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js index f6656f6fb..435bda342 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js @@ -278,7 +278,9 @@ export default async function createDocumentwithCoordinate(request, response) { const objectId = contactMail[i].contactPtr.objectId; const hostUrl = baseUrl.origin; - let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`; + const encodeBase64 = btoa(`${response.id}/${contactMail[i].email}/${objectId}`); + let signPdf = `${hostUrl}/login/${encodeBase64}`; + // let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`; const openSignUrl = 'https://www.opensignlabs.com/contact-us'; const orgName = parseExtUser.Company ? parseExtUser.Company : ''; const themeBGcolor = '#47a3ad'; @@ -359,11 +361,12 @@ export default async function createDocumentwithCoordinate(request, response) { properties: { response_code: 200 }, }); } + const encodeBase64 = btoa(`${res.id}/${x.email}/${x.contactPtr.objectId}`); return response.json({ objectId: res.id, signurl: contact.map(x => ({ email: x.email, - url: `${baseUrl.origin}/login/${res.id}/${x.email}/${x.contactPtr.objectId}/${serverParams}`, + url: `${baseUrl.origin}/login/${encodeBase64}`, })), message: 'Document sent successfully!', }); From 66bf577676be48a82790756f8a26841ff19916f4 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 7 May 2024 09:54:10 +0530 Subject: [PATCH 05/20] refactor: add comment --- apps/OpenSign/src/pages/GuestLogin.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/OpenSign/src/pages/GuestLogin.js b/apps/OpenSign/src/pages/GuestLogin.js index 78f4ce2fa..409b29fb0 100644 --- a/apps/OpenSign/src/pages/GuestLogin.js +++ b/apps/OpenSign/src/pages/GuestLogin.js @@ -40,7 +40,7 @@ function GuestLogin() { localStorage.clear(); let parseId, appName, newServer; - //first condition is used to handle old route data url that already save + //first condition is used to manage previously stored URL data for the old route. if (id) { //split url in array from '&' const checkSplit = serverUrl.split("&"); @@ -50,9 +50,11 @@ function GuestLogin() { newServer = server.replaceAll("%2F", "/"); setEmail(userMail); } else { + //in this condition decode base64 route to in string and save required dataf. parseId = appInfo.appId; newServer = `${appInfo.baseUrl}/`; appName = appInfo.appname; + //`atob` function is used to decode base64 const decodebase64 = atob(base64url); //split url in array from '/' const checkSplit = decodebase64.split("/"); From 2ae7e8ced28cb6921922e4f8c96924db6f894deb Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 7 May 2024 11:53:17 +0530 Subject: [PATCH 06/20] fix: document loading error No PDF file specified --- apps/OpenSign/src/pages/PdfRequestFiles.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index e3ec3012f..6a1aebceb 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -471,7 +471,8 @@ function PdfRequestFiles() { const maxCount = requiredCheckbox[i].options?.validation?.maxRequiredCount; const parseMax = maxCount && parseInt(maxCount); - const response = requiredCheckbox[i].options?.response?.length; + const response = + requiredCheckbox[i].options?.response?.length; const defaultValue = requiredCheckbox[i].options?.defaultValue?.length; if (parseMin === 0 && parseMax === 0) { @@ -670,7 +671,8 @@ function PdfRequestFiles() { )}&${localStorage.getItem("_appName")}`; const hostUrl = window.location.origin; let signPdf = `${hostUrl}/login/${pdfDetails?.[0].objectId}/${user.Email}/${objectId}/${serverParams}`; - const openSignUrl = "https://www.opensignlabs.com/contact-us"; + const openSignUrl = + "https://www.opensignlabs.com/contact-us"; const orgName = pdfDetails[0]?.ExtUserPtr.Company ? pdfDetails[0].ExtUserPtr.Company : ""; @@ -681,7 +683,10 @@ function PdfRequestFiles() { requestSubject && (!isEnableSubscription || isSubscribed) ) { - const replacedRequestBody = requestBody.replace(/"/g, "'"); + const replacedRequestBody = requestBody.replace( + /"/g, + "'" + ); const htmlReqBody = "" + replacedRequestBody + @@ -1148,9 +1153,9 @@ function PdfRequestFiles() { isDecline.currnt === "Sure" ? "Are you sure want to decline this document ?" : isDecline.currnt === "YouDeclined" - ? "You have declined this document!" - : isDecline.currnt === "another" && - "You can not sign this document as it has been declined/revoked." + ? "You have declined this document!" + : isDecline.currnt === "another" && + "You can not sign this document as it has been declined/revoked." } footerMessage={isDecline.currnt === "Sure"} declineDoc={declineDoc} @@ -1229,7 +1234,10 @@ function PdfRequestFiles() { {/* this component used to render all pdf pages in left side */} Date: Tue, 7 May 2024 12:20:43 +0530 Subject: [PATCH 07/20] Revert "fix: Document loading error `No PDF file specified`" --- apps/OpenSign/src/pages/PdfRequestFiles.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 0eb54aeb0..4b4cb0781 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -1331,10 +1331,7 @@ function PdfRequestFiles() { {/* this component used to render all pdf pages in left side */} Date: Tue, 7 May 2024 15:55:46 +0530 Subject: [PATCH 08/20] fix: in opensign-drive unnecessary render tour message and onclick same folder route then it show no data found issue --- apps/OpenSign/src/pages/Opensigndrive.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/OpenSign/src/pages/Opensigndrive.js b/apps/OpenSign/src/pages/Opensigndrive.js index 0803cb8bb..12d1c0f61 100644 --- a/apps/OpenSign/src/pages/Opensigndrive.js +++ b/apps/OpenSign/src/pages/Opensigndrive.js @@ -64,6 +64,7 @@ function Opensigndrive() { const sortingValue = ["Name", "Date"]; const [isDontShow, setIsDontShow] = useState(false); const [tourData, setTourData] = useState(); + const [showTourFirstTIme, setShowTourFirstTime] = useState(true); const orderName = { Ascending: "Ascending", Descending: "Descending", @@ -134,7 +135,9 @@ function Opensigndrive() { //function for get all pdf document list const getPdfDocumentList = async (disbaleLoading) => { setLoading(true); - checkTourStatus(); + if (showTourFirstTIme) { + checkTourStatus(); + } if (!disbaleLoading) { setIsLoading({ isLoad: true, message: "This might take some time" }); } @@ -250,17 +253,23 @@ function Opensigndrive() { }, [loading, sortingOrder, selectedSort]); // Add/remove scroll event listener when loading changes //function for handle folder name path - const handleRoute = (index) => { - setPdfData([]); + const handleRoute = (index, folderData) => { setSkip(0); + // after onclick on route filter route from that index const updateFolderName = folderName.filter((x, i) => { if (i <= index) { return x; } }); setFolderName(updateFolderName); + //get route details after onclick path of folder name + const getCurrentId = folderData[index]; const getLastId = updateFolderName[updateFolderName.length - 1]; - setDocId(getLastId.objectId); + //below condition is used to check if user click on same route which already open then don't change any thing + if (docId !== getCurrentId.objectId) { + setPdfData([]); + setDocId(getLastId.objectId); + } }; //function for add new folder name @@ -439,7 +448,7 @@ function Opensigndrive() { return ( handleRoute(id)} + onClick={() => handleRoute(id, folderData)} style={{ color: "#a64b4e", fontWeight: "400", @@ -474,6 +483,7 @@ function Opensigndrive() { const closeTour = async () => { setIsTour(false); + setShowTourFirstTime(false); if (isDontShow) { const serverUrl = localStorage.getItem("baseUrl"); const appId = localStorage.getItem("parseAppId"); From d9126d6701cb74cf36c24c31b805bf5f5f8f78ae Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 7 May 2024 16:04:47 +0530 Subject: [PATCH 09/20] refactor: add comment --- apps/OpenSign/src/pages/PdfRequestFiles.js | 7 ++++--- apps/OpenSign/src/pages/PlaceHolderSign.js | 4 ++-- apps/OpenSign/src/primitives/GetReportDisplay.js | 1 + .../customRoute/v1/routes/CreateDocumentWithTemplate.js | 2 ++ .../customRoute/v1/routes/createDocumentwithCoordinate.js | 2 ++ 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 2a71a2f4c..a1d768fad 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -747,6 +747,7 @@ function PdfRequestFiles() { // "parseAppId" // )}&${localStorage.getItem("_appName")}`; const hostUrl = window.location.origin; + //encode this url value `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` to base64 using `btoa` function const encodeBase64 = btoa( `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` ); @@ -1249,9 +1250,9 @@ function PdfRequestFiles() { isDecline.currnt === "Sure" ? "Are you sure want to decline this document ?" : isDecline.currnt === "YouDeclined" - ? "You have declined this document!" - : isDecline.currnt === "another" && - "You can not sign this document as it has been declined/revoked." + ? "You have declined this document!" + : isDecline.currnt === "another" && + "You can not sign this document as it has been declined/revoked." } footerMessage={isDecline.currnt === "Sure"} declineDoc={declineDoc} diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 516ffa68c..978eec980 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -969,7 +969,7 @@ function PlaceHolderSign() { for (let i = 0; i < signerMail.length; i++) { const objectId = signerMail[i].objectId; const hostUrl = window.location.origin; - //convert this url documentId/signersEmail/signerObjId base64 and send url + //encode this url value `${pdfDetails?.[0].objectId}/${signerMail[i].Email}/${objectId}` to base64 using `btoa` function const encodeBase64 = btoa( `${pdfDetails?.[0].objectId}/${signerMail[i].Email}/${objectId}` ); @@ -1049,7 +1049,7 @@ function PlaceHolderSign() { }; const objectId = signerMail[i].objectId; const hostUrl = window.location.origin; - //convert this url documentId/signersEmail/signerObjId base64 and send url + //encode this url value `${pdfDetails?.[0].objectId}/${signerMail[i].Email}/${objectId}` to base64 using `btoa` function const encodeBase64 = btoa( `${pdfDetails?.[0].objectId}/${signerMail[i].Email}/${objectId}` ); diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index d492b83e4..fe54580cd 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -293,6 +293,7 @@ const ReportTable = (props) => { // const baseURL = serverUrl.replace(/\//g, "%2F"); const getUrl = (x) => { + //encode this url value `${item.objectId}/${x.Email}/${x.objectId}` to base64 using `btoa` function const encodeBase64 = btoa(`${item.objectId}/${x.Email}/${x.objectId}`); return `${host}/login/${encodeBase64}`; }; diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js index bc5343487..a075f3aae 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js @@ -219,6 +219,7 @@ export default async function createDocumentWithTemplate(request, response) { const objectId = contactMail[i].contactPtr.objectId; const hostUrl = baseUrl.origin; // let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`; + //encode this url value `${res.id}/${contactMail[i].email}/${objectId}` to base64 using `btoa` function const encodeBase64 = btoa(`${res.id}/${contactMail[i].email}/${objectId}`); let signPdf = `${hostUrl}/login/${encodeBase64}`; const openSignUrl = 'https://www.opensignlabs.com/contact-us'; @@ -317,6 +318,7 @@ export default async function createDocumentWithTemplate(request, response) { properties: { response_code: 200 }, }); } + //encode this url value `${res.id}/${x.email}/${x.contactPtr.objectId}` to base64 using `btoa` function const encodeBase64 = btoa(`${res.id}/${x.email}/${x.contactPtr.objectId}`); return response.json({ objectId: res.id, diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js index 435bda342..b954e046e 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js @@ -278,6 +278,7 @@ export default async function createDocumentwithCoordinate(request, response) { const objectId = contactMail[i].contactPtr.objectId; const hostUrl = baseUrl.origin; + //encode this url value `${response.id}/${contactMail[i].email}/${objectId}` to base64 using `btoa` function const encodeBase64 = btoa(`${response.id}/${contactMail[i].email}/${objectId}`); let signPdf = `${hostUrl}/login/${encodeBase64}`; // let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`; @@ -361,6 +362,7 @@ export default async function createDocumentwithCoordinate(request, response) { properties: { response_code: 200 }, }); } + //encode this url value `${res.id}/${x.email}/${x.contactPtr.objectId}` to base64 using `btoa` function const encodeBase64 = btoa(`${res.id}/${x.email}/${x.contactPtr.objectId}`); return response.json({ objectId: res.id, From 65d5c7f33791dd036d3512ae8ab9161b7b12d3c8 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 7 May 2024 18:30:06 +0530 Subject: [PATCH 10/20] refactor: remove commented code and remove extra condition --- apps/OpenSign/src/pages/GuestLogin.js | 32 +++++++------------ apps/OpenSign/src/pages/PdfRequestFiles.js | 6 ---- .../src/primitives/GetReportDisplay.js | 5 --- .../v1/routes/CreateDocumentWithTemplate.js | 1 - .../v1/routes/createDocumentwithCoordinate.js | 1 - 5 files changed, 11 insertions(+), 34 deletions(-) diff --git a/apps/OpenSign/src/pages/GuestLogin.js b/apps/OpenSign/src/pages/GuestLogin.js index 409b29fb0..6df724448 100644 --- a/apps/OpenSign/src/pages/GuestLogin.js +++ b/apps/OpenSign/src/pages/GuestLogin.js @@ -9,9 +9,9 @@ import logo from "../assets/images/logo.png"; import { appInfo } from "../constant/appinfo"; function GuestLogin() { - const { id, userMail, contactBookId, serverUrl, base64url } = useParams(); + const { id, userMail, contactBookId, base64url } = useParams(); let navigate = useNavigate(); - const [email, setEmail] = useState(""); + const [email, setEmail] = useState(userMail); const [OTP, setOTP] = useState(""); const [EnterOTP, setEnterOtp] = useState(false); const [loading, setLoading] = useState(false); @@ -39,33 +39,23 @@ function GuestLogin() { } localStorage.clear(); - let parseId, appName, newServer; - //first condition is used to manage previously stored URL data for the old route. - if (id) { - //split url in array from '&' - const checkSplit = serverUrl.split("&"); - const server = checkSplit[0]; - parseId = checkSplit[1]; - appName = checkSplit[2]; - newServer = server.replaceAll("%2F", "/"); - setEmail(userMail); - } else { - //in this condition decode base64 route to in string and save required dataf. - parseId = appInfo.appId; - newServer = `${appInfo.baseUrl}/`; - appName = appInfo.appname; + const parseId = appInfo.appId; + const newServer = `${appInfo.baseUrl}/`; + const appName = appInfo.appname; + localStorage.setItem("baseUrl", newServer); + localStorage.setItem("parseAppId", parseId); + localStorage.setItem("_appName", appName); + //first condition is used decode base64 to string and get userEmail,documentId, contactBoookId data. + if (!id) { //`atob` function is used to decode base64 const decodebase64 = atob(base64url); //split url in array from '/' const checkSplit = decodebase64.split("/"); - setEmail(checkSplit[1]); setDocumentId(checkSplit[0]); + setEmail(checkSplit[1]); setContactId(checkSplit[2]); } - localStorage.setItem("baseUrl", newServer); - localStorage.setItem("parseAppId", parseId); - localStorage.setItem("_appName", appName); setIsLoading(false); }; diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index a1d768fad..57a6bef83 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -740,19 +740,13 @@ function PdfRequestFiles() { localStorage.getItem("parseAppId"), sessionToken: localStorage.getItem("accesstoken") }; - // const serverUrl = localStorage.getItem("baseUrl"); - // const newServer = serverUrl.replaceAll("/", "%2F"); const objectId = user.objectId; - // const serverParams = `${newServer}&${localStorage.getItem( - // "parseAppId" - // )}&${localStorage.getItem("_appName")}`; const hostUrl = window.location.origin; //encode this url value `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` to base64 using `btoa` function const encodeBase64 = btoa( `${pdfDetails?.[0].objectId}/${user.Email}/${objectId}` ); let signPdf = `${hostUrl}/login/${encodeBase64}`; - // let signPdf = `${hostUrl}/login/${pdfDetails?.[0].objectId}/${user.Email}/${objectId}/${serverParams}`; const openSignUrl = "https://www.opensignlabs.com/contact-us"; const orgName = pdfDetails[0]?.ExtUserPtr.Company diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index fe54580cd..927a0e14f 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -287,11 +287,6 @@ const ReportTable = (props) => { const handleShare = (item) => { setActLoader({ [item.objectId]: true }); const host = window.location.origin; - // const serverUrl = process.env.REACT_APP_SERVERURL - // ? process.env.REACT_APP_SERVERURL - // : window.location.origin + "/api/app"; - // const baseURL = serverUrl.replace(/\//g, "%2F"); - const getUrl = (x) => { //encode this url value `${item.objectId}/${x.Email}/${x.objectId}` to base64 using `btoa` function const encodeBase64 = btoa(`${item.objectId}/${x.Email}/${x.objectId}`); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js index a075f3aae..f70466a9f 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js @@ -218,7 +218,6 @@ export default async function createDocumentWithTemplate(request, response) { const objectId = contactMail[i].contactPtr.objectId; const hostUrl = baseUrl.origin; - // let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`; //encode this url value `${res.id}/${contactMail[i].email}/${objectId}` to base64 using `btoa` function const encodeBase64 = btoa(`${res.id}/${contactMail[i].email}/${objectId}`); let signPdf = `${hostUrl}/login/${encodeBase64}`; diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js index b954e046e..52c00ef33 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js @@ -281,7 +281,6 @@ export default async function createDocumentwithCoordinate(request, response) { //encode this url value `${response.id}/${contactMail[i].email}/${objectId}` to base64 using `btoa` function const encodeBase64 = btoa(`${response.id}/${contactMail[i].email}/${objectId}`); let signPdf = `${hostUrl}/login/${encodeBase64}`; - // let signPdf = `${hostUrl}/login/${res.id}/${contactMail[i].email}/${objectId}/${serverParams}`; const openSignUrl = 'https://www.opensignlabs.com/contact-us'; const orgName = parseExtUser.Company ? parseExtUser.Company : ''; const themeBGcolor = '#47a3ad'; From 0f6701300543cee6985a4b5b28633c6c1846fa12 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 7 May 2024 18:30:45 +0530 Subject: [PATCH 11/20] refactor: remove commented code and remove extra condition --- apps/OpenSign/src/pages/GuestLogin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/OpenSign/src/pages/GuestLogin.js b/apps/OpenSign/src/pages/GuestLogin.js index 6df724448..003ef60bb 100644 --- a/apps/OpenSign/src/pages/GuestLogin.js +++ b/apps/OpenSign/src/pages/GuestLogin.js @@ -45,7 +45,7 @@ function GuestLogin() { localStorage.setItem("baseUrl", newServer); localStorage.setItem("parseAppId", parseId); localStorage.setItem("_appName", appName); - //first condition is used decode base64 to string and get userEmail,documentId, contactBoookId data. + //this condition is used decode base64 to string and get userEmail,documentId, contactBoookId data. if (!id) { //`atob` function is used to decode base64 const decodebase64 = atob(base64url); From a26e65f76f3d81cf672d7d8814979e9ee08f070a Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 7 May 2024 19:29:09 +0530 Subject: [PATCH 12/20] fix: x is not defined error in createDocumentWithTemplate and createDocumentwithCoordinate function --- .../customRoute/v1/routes/CreateDocumentWithTemplate.js | 6 +++--- .../customRoute/v1/routes/createDocumentwithCoordinate.js | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js index f70466a9f..49615a6cc 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/CreateDocumentWithTemplate.js @@ -317,13 +317,13 @@ export default async function createDocumentWithTemplate(request, response) { properties: { response_code: 200 }, }); } - //encode this url value `${res.id}/${x.email}/${x.contactPtr.objectId}` to base64 using `btoa` function - const encodeBase64 = btoa(`${res.id}/${x.email}/${x.contactPtr.objectId}`); return response.json({ objectId: res.id, signurl: contact.map(x => ({ email: x.email, - url: `${baseUrl.origin}/login/${encodeBase64}`, + url: `${baseUrl.origin}/login/${btoa( + `${res.id}/${x.email}/${x.contactPtr.objectId}` + )}`, })), message: 'Document sent successfully!', }); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js index 52c00ef33..560b114aa 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocumentwithCoordinate.js @@ -361,13 +361,11 @@ export default async function createDocumentwithCoordinate(request, response) { properties: { response_code: 200 }, }); } - //encode this url value `${res.id}/${x.email}/${x.contactPtr.objectId}` to base64 using `btoa` function - const encodeBase64 = btoa(`${res.id}/${x.email}/${x.contactPtr.objectId}`); return response.json({ objectId: res.id, signurl: contact.map(x => ({ email: x.email, - url: `${baseUrl.origin}/login/${encodeBase64}`, + url: `${baseUrl.origin}/login/${btoa(`${res.id}/${x.email}/${x.contactPtr.objectId}`)}`, })), message: 'Document sent successfully!', }); From 179c3c5dfe5e7a4e02472120a818e9b970a8bab6 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 7 May 2024 19:57:39 +0530 Subject: [PATCH 13/20] fix: document loading error No PDF file specified --- apps/OpenSign/src/pages/PdfRequestFiles.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 57a6bef83..c5ab5659d 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -1337,7 +1337,10 @@ function PdfRequestFiles() { {/* this component used to render all pdf pages in left side */} Date: Tue, 7 May 2024 20:00:26 +0530 Subject: [PATCH 14/20] Revert "fix: document loading error No PDF file specified" --- apps/OpenSign/src/pages/PdfRequestFiles.js | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 6a1aebceb..e3ec3012f 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -471,8 +471,7 @@ function PdfRequestFiles() { const maxCount = requiredCheckbox[i].options?.validation?.maxRequiredCount; const parseMax = maxCount && parseInt(maxCount); - const response = - requiredCheckbox[i].options?.response?.length; + const response = requiredCheckbox[i].options?.response?.length; const defaultValue = requiredCheckbox[i].options?.defaultValue?.length; if (parseMin === 0 && parseMax === 0) { @@ -671,8 +670,7 @@ function PdfRequestFiles() { )}&${localStorage.getItem("_appName")}`; const hostUrl = window.location.origin; let signPdf = `${hostUrl}/login/${pdfDetails?.[0].objectId}/${user.Email}/${objectId}/${serverParams}`; - const openSignUrl = - "https://www.opensignlabs.com/contact-us"; + const openSignUrl = "https://www.opensignlabs.com/contact-us"; const orgName = pdfDetails[0]?.ExtUserPtr.Company ? pdfDetails[0].ExtUserPtr.Company : ""; @@ -683,10 +681,7 @@ function PdfRequestFiles() { requestSubject && (!isEnableSubscription || isSubscribed) ) { - const replacedRequestBody = requestBody.replace( - /"/g, - "'" - ); + const replacedRequestBody = requestBody.replace(/"/g, "'"); const htmlReqBody = "" + replacedRequestBody + @@ -1153,9 +1148,9 @@ function PdfRequestFiles() { isDecline.currnt === "Sure" ? "Are you sure want to decline this document ?" : isDecline.currnt === "YouDeclined" - ? "You have declined this document!" - : isDecline.currnt === "another" && - "You can not sign this document as it has been declined/revoked." + ? "You have declined this document!" + : isDecline.currnt === "another" && + "You can not sign this document as it has been declined/revoked." } footerMessage={isDecline.currnt === "Sure"} declineDoc={declineDoc} @@ -1234,10 +1229,7 @@ function PdfRequestFiles() { {/* this component used to render all pdf pages in left side */} Date: Tue, 7 May 2024 15:05:50 +0000 Subject: [PATCH 15/20] docs: update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 82a1c3b4c..c844211b5 100644 --- a/README.md +++ b/README.md @@ -134,6 +134,7 @@ We would like to thank all our contributors and users for their support and feed Vikram
Vikram

💻 + ugoconsonni
ugoconsonni

💻 From d3bf9e9e9b971cf78e75a8d0aa8c923e1de745bc Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 15:05:51 +0000 Subject: [PATCH 16/20] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index c6fe8646b..ae439aea3 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -205,6 +205,15 @@ "contributions": [ "code" ] + }, + { + "login": "ugoconsonni", + "name": "ugoconsonni", + "avatar_url": "https://avatars.githubusercontent.com/u/13661702?v=4", + "profile": "https://github.com/ugoconsonni", + "contributions": [ + "code" + ] } ] } From 9e3ba2cf5c06429baf6a11d495358520f2cf8918 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 15:06:42 +0000 Subject: [PATCH 17/20] docs: update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c844211b5..c1b9314b5 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ We would like to thank all our contributors and users for their support and feed Vikram
Vikram

💻 ugoconsonni
ugoconsonni

💻 + Zathiel
Zathiel

💻 From e9eb59aa7aabe58c488c382fb1dec1d6fea48441 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 15:06:43 +0000 Subject: [PATCH 18/20] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index ae439aea3..7f60b7e10 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -214,6 +214,15 @@ "contributions": [ "code" ] + }, + { + "login": "Zathiel", + "name": "Zathiel", + "avatar_url": "https://avatars.githubusercontent.com/u/26553418?v=4", + "profile": "https://github.com/Zathiel", + "contributions": [ + "code" + ] } ] } From d45566257f9eb710c1127749be9ba54d7ef92e18 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 15:07:20 +0000 Subject: [PATCH 19/20] docs: update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c844211b5..e88d26f39 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ We would like to thank all our contributors and users for their support and feed Vikram
Vikram

💻 ugoconsonni
ugoconsonni

💻 + Daniel Mutwiri
Daniel Mutwiri

💻 From 3fd06134070c4eb3c1564663a9971813a24a6ced Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 15:07:21 +0000 Subject: [PATCH 20/20] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index ae439aea3..a2616371d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -214,6 +214,15 @@ "contributions": [ "code" ] + }, + { + "login": "daniel-mutwiri", + "name": "Daniel Mutwiri", + "avatar_url": "https://avatars.githubusercontent.com/u/8936960?v=4", + "profile": "https://github.com/daniel-mutwiri", + "contributions": [ + "code" + ] } ] }