From 0f62419d9983a63b27d6435815cc737db5f884de Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Mon, 6 Nov 2023 16:48:06 +0530 Subject: [PATCH 1/5] remove confidential passphrase param --- apps/OpenSignServer/cloud/parsefunction/pdf/SignPDF.min.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/SignPDF.min.cjs b/apps/OpenSignServer/cloud/parsefunction/pdf/SignPDF.min.cjs index 509e2dd53..b84ba4c9b 100644 --- a/apps/OpenSignServer/cloud/parsefunction/pdf/SignPDF.min.cjs +++ b/apps/OpenSignServer/cloud/parsefunction/pdf/SignPDF.min.cjs @@ -1 +1 @@ -const signer=require("node-signpdf").default;class SignPDF{constructor(e,t){this.pdfDoc=e,this.certificate=t}async signPDF(){return signer.sign(this.pdfDoc,this.certificate,{passphrase:"emudhra"})}static unit8ToBuffer(e){var t=Buffer.alloc(e.byteLength),r=new Uint8Array(e);for(let e=0;e Date: Mon, 6 Nov 2023 19:44:06 +0530 Subject: [PATCH 2/5] fix: add loadmf route to load login flow of microapp, add pagenotfound microapp --- apps/OpenSign/src/App.js | 2 + .../src/primitives/GetReportDisplay.js | 4 +- apps/OpenSign/src/routes/LoadMf.js | 84 +++++++++++++++++++ apps/OpenSign/src/routes/PlanSubscriptions.js | 2 +- .../src/Component/PageNotFound.js | 16 ++++ .../SignDocuments/src/Component/login.js | 3 +- microfrontends/SignDocuments/src/Routes.js | 8 +- 7 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 apps/OpenSign/src/routes/LoadMf.js create mode 100644 microfrontends/SignDocuments/src/Component/PageNotFound.js diff --git a/apps/OpenSign/src/App.js b/apps/OpenSign/src/App.js index 76ef93ee9..500e00808 100644 --- a/apps/OpenSign/src/App.js +++ b/apps/OpenSign/src/App.js @@ -14,6 +14,7 @@ import PageNotFound from "./routes/PageNotFound"; import ForgetPassword from "./routes/ForgetPassword"; import ChangePassword from "./routes/ChangePassword"; import ReportMicroapp from "./components/ReportMicroapp"; +import LoadMf from "./routes/LoadMf"; function App() { const [isloading, setIsLoading] = useState(true); @@ -59,6 +60,7 @@ function App() { } /> } /> + } /> } /> {process.env.REACT_APP_ENABLE_SUBSCRIPTION && ( <> diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index 0bf111c1a..4bf02a818 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -93,7 +93,7 @@ const ReportTable = ({ {List?.length > 0 ? ( <> {currentLists.map((item, index) => ( - + {index + 1} {item?.Name} {item?.Note || "-"} @@ -153,7 +153,7 @@ const ReportTable = ({ )} -
+
{List.length > 10 && ( <> {currentPage > 1 && ( diff --git a/apps/OpenSign/src/routes/LoadMf.js b/apps/OpenSign/src/routes/LoadMf.js new file mode 100644 index 000000000..2f8a43a1f --- /dev/null +++ b/apps/OpenSign/src/routes/LoadMf.js @@ -0,0 +1,84 @@ +import { Suspense } from "react"; +import { useParams } from "react-router-dom"; +import useFederatedComponent from "mf-cra"; +import React from "react"; +import Title from "../components/Title"; +function RemoteApp({ app }) { + // console.log("app ", app); + const { Component: RemoteComponent } = useFederatedComponent(app); + // console.log("RemoteComponent ", RemoteComponent); + return ( + <> + + <Suspense + fallback={ + <div style={{ height: "300px" }}> + <div + style={{ + marginLeft: "45%", + marginTop: "150px", + fontSize: "45px", + color: "#3dd3e0" + }} + className="loader-37" + ></div> + </div> + } + > + <div + style={{ + boxShadow: "0 1px 3px 0 rgba(0, 0, 0, 0.33)", + backgroundColor: "#ffffff", + width: "100%", + overflow: "hidden", + borderRadius: 3, + minHeight: "70vh" + }} + > + {RemoteComponent && <RemoteComponent />} + </div> + </Suspense> + </> + ); +} +function checkObjectProperties(obj) { + // Check if all three properties exist in the object + if ( + obj && + obj.remoteName !== undefined && + obj.remoteUrl !== undefined && + obj.moduleToLoad !== undefined + ) { + return true; // All properties are present + } else { + return false; // At least one property is missing + } +} +export default function RemoteAppContainer() { + const { remoteApp } = useParams(); + + const obj = { + remoteUrl: window.location.origin + "/mfbuild/remoteEntry.js", + moduleToLoad: "./AppRoutes", + remoteName: remoteApp + }; + // console.log("obj ", obj); + const isMf = checkObjectProperties(obj); + if (isMf) { + const appToLoad = obj; + return <RemoteApp app={appToLoad} />; + } else { + return ( + <div className="flex items-center justify-center h-screen w-full bg-white rounded"> + <div className="text-center"> + <h1 className="text-[60px] lg:text-[120px] font-semibold text-black"> + 404 + </h1> + <p className="text-[30px] lg:text-[50px] text-black"> + Page Not Found + </p> + </div> + </div> + ); + } +} diff --git a/apps/OpenSign/src/routes/PlanSubscriptions.js b/apps/OpenSign/src/routes/PlanSubscriptions.js index 61784986e..740277932 100644 --- a/apps/OpenSign/src/routes/PlanSubscriptions.js +++ b/apps/OpenSign/src/routes/PlanSubscriptions.js @@ -64,7 +64,7 @@ const PlanSubscriptions = () => { style={{ backgroundColor: "white", overflowY: "auto", - maxHeight: "600px", + maxHeight: "100%", "--theme-color": "#7952b3", "--plan-width": 30 }} diff --git a/microfrontends/SignDocuments/src/Component/PageNotFound.js b/microfrontends/SignDocuments/src/Component/PageNotFound.js new file mode 100644 index 000000000..b9e912e32 --- /dev/null +++ b/microfrontends/SignDocuments/src/Component/PageNotFound.js @@ -0,0 +1,16 @@ +import React from "react"; + +const PageNotFound = () => { + return ( + <div className="flex items-center justify-center h-screen w-full bg-white rounded"> + <div className="text-center"> + <h1 className="text-[60px] lg:text-[120px] font-semibold text-black"> + 404 + </h1> + <p className="text-[30px] lg:text-[50px] text-black">Page Not Found</p> + </div> + </div> + ); +}; + +export default PageNotFound; diff --git a/microfrontends/SignDocuments/src/Component/login.js b/microfrontends/SignDocuments/src/Component/login.js index 9995e1970..1636beff7 100644 --- a/microfrontends/SignDocuments/src/Component/login.js +++ b/microfrontends/SignDocuments/src/Component/login.js @@ -116,7 +116,8 @@ function Login() { localStorage.setItem("accesstoken", _user.sessionToken); setLoading(false); //navigate user to on signature page - navigate(`/recipientSignPdf/${id}/${contactBookId}`); + // navigate(`/recipientSignPdf/${id}/${contactBookId}`); + navigate(`/loadmf/signmicroapp/recipientSignPdf/${id}/${contactBookId}`); } } catch (error) {} } else { diff --git a/microfrontends/SignDocuments/src/Routes.js b/microfrontends/SignDocuments/src/Routes.js index e9883138b..605212871 100644 --- a/microfrontends/SignDocuments/src/Routes.js +++ b/microfrontends/SignDocuments/src/Routes.js @@ -8,6 +8,7 @@ import Login from "./Component/login"; import DraftDocument from "./Component/DraftDocument"; import PdfRequestFiles from "./Component/PdfRequestFiles"; import LegaDrive from "./Component/LegaDrive/LegaDrive"; +import PageNotFound from "./Component/PageNotFound"; // `AppRoutes` is used to define route path of app and // it expose to host app, check moduleFederation.config.js for more @@ -33,7 +34,10 @@ function AppRoutes() { {/*Add default signature of user route */} <Route path="/managesign" element={<ManageSign />} /> {/* login page route */} - <Route path="/login/:id/:userMail/:contactBookId/:serverUrl" element={<Login />} /> + <Route + path="/login/:id/:userMail/:contactBookId/:serverUrl" + element={<Login />} + /> {/* draft document route to handle and navigate route page accordiing to document status */} <Route path="/draftDocument" element={<DraftDocument />} /> {/* for user signature (need your sign route) with row level data */} @@ -42,6 +46,8 @@ function AppRoutes() { <Route path="/pdfRequestFiles/:docId" element={<PdfRequestFiles />} /> {/* lega drive route */} <Route path="/legadrive" element={<LegaDrive />} /> + {/* Page Not Found */} + <Route path="*" element={<PageNotFound />} /> </Routes> </div> ); From 4b9088b2522f2a6561e71a9ff3cd74cb9f077cf5 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs <prafull.navkar@nxglabs.com> Date: Mon, 6 Nov 2023 20:00:10 +0530 Subject: [PATCH 3/5] docs: update pass_phrase variable in env files --- .env.example | 3 +++ .env.local_dev | 3 +++ 2 files changed, 6 insertions(+) diff --git a/.env.example b/.env.example index 7ca014a84..ddc7f8b50 100644 --- a/.env.example +++ b/.env.example @@ -47,3 +47,6 @@ MAILGUN_SENDER=postmaster@mail.yourdomain.com # Base64 encoded PFX or p12 document signing certificate file ********************************************************************************************************************* PFX_BASE64= + +# Provide Pass pharse of above PFX or p12 document +PASS_PHRASE= diff --git a/.env.local_dev b/.env.local_dev index 7d0a4a251..6059c326e 100644 --- a/.env.local_dev +++ b/.env.local_dev @@ -51,3 +51,6 @@ MAILGUN_SENDER=postmaster@mail.yourdomain.com # Base64 encoded PFX or p12 document signing certificate file ********************************************************************************************************************* PFX_BASE64= + +# Provide Pass pharse of above PFX or p12 document +PASS_PHRASE= From 1e76cf5253f2427a9eb64f487d19f5244fa91c08 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs <prafull.navkar@nxglabs.com> Date: Mon, 6 Nov 2023 20:48:01 +0530 Subject: [PATCH 4/5] fix: login url in mail change to current host --- .../SignDocuments/src/Component/placeHolderSign.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/microfrontends/SignDocuments/src/Component/placeHolderSign.js b/microfrontends/SignDocuments/src/Component/placeHolderSign.js index 80ef92e27..39db3656b 100644 --- a/microfrontends/SignDocuments/src/Component/placeHolderSign.js +++ b/microfrontends/SignDocuments/src/Component/placeHolderSign.js @@ -166,7 +166,7 @@ function PlaceHolderSign() { getDocumentDetails(); } }, []); - + //function for get document details const getDocumentDetails = async () => { await axios @@ -275,7 +275,7 @@ function PlaceHolderSign() { getSignerPos(item, monitor); } }; - + const getSignerPos = (item, monitor) => { const key = Math.floor(1000 + Math.random() * 9000); let filterSignerPos = signerPos.filter( @@ -396,7 +396,7 @@ function PlaceHolderSign() { blockColor: color[isSelectListId], placeHolder: xyPosArr }; - + setSignerPos((prev) => [...prev, placeHolderPos]); } }; @@ -626,7 +626,7 @@ function PlaceHolderSign() { setSignBtnPosition([]); setPageNumber((prevPageNumber) => prevPageNumber + offset); } - + //function for capture position on hover signature button const handleDivClick = (e) => { const divRect = e.currentTarget.getBoundingClientRect(); @@ -679,7 +679,7 @@ function PlaceHolderSign() { year: "numeric" }); let sender = signersdata.ExtUserPtr.Email; - const signerMail = signersdata.Signers; + const signerMail = signersdata.Signers; for (let i = 0; i < signerMail.length; i++) { try { @@ -698,7 +698,8 @@ function PlaceHolderSign() { "parseAppId" )}&${localStorage.getItem("_appName")}`; - let signPdf = `https://qik-ai-org.github.io/Sign-MicroappV2/#/login/${signersdata.objectId}/${signerMail[i].Email}/${objectId}/${serverParams}`; + const hostUrl = window.location.origin + "/loadmf/signmicroapp"; + let signPdf = `${hostUrl}/login/${signersdata.objectId}/${signerMail[i].Email}/${objectId}/${serverParams}`; const themeBGcolor = themeColor(); let params = { From f227b7931606c71b7439228757c237f902d38b38 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs <prafull.navkar@nxglabs.com> Date: Tue, 7 Nov 2023 11:29:08 +0530 Subject: [PATCH 5/5] change prod and dev command --- apps/OpenSign/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/OpenSign/package.json b/apps/OpenSign/package.json index 0b354b9c7..f460f70f7 100644 --- a/apps/OpenSign/package.json +++ b/apps/OpenSign/package.json @@ -40,8 +40,8 @@ "web-vitals": "^2.1.4" }, "scripts": { - "start": "mf-cra start", - "start-prod": "serve -s build", + "start": "serve -s build", + "start-dev": "mf-cra start", "build": "rm -rf public/mfbuild && npm run micro && CI=false && mf-cra build", "micro": "cd ../../microfrontends/SignDocuments && npm install && npm run build", "test": "react-scripts test",