diff --git a/apps/OpenSign/src/constant/Utils.js b/apps/OpenSign/src/constant/Utils.js
index ab4f4e9a6..8823a4863 100644
--- a/apps/OpenSign/src/constant/Utils.js
+++ b/apps/OpenSign/src/constant/Utils.js
@@ -2008,3 +2008,16 @@ export const convertPdfArrayBuffer = async (url) => {
return "Error";
}
};
+export const handleSendOTP = async (email) => {
+ try {
+ let url = `${localStorage.getItem("baseUrl")}functions/SendOTPMailV1`;
+ const headers = {
+ "Content-Type": "application/json",
+ "X-Parse-Application-Id": localStorage.getItem("parseAppId")
+ };
+ const body = { email: email };
+ await axios.post(url, body, { headers: headers });
+ } catch (error) {
+ alert(error.message);
+ }
+};
diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js
index 50be8ced4..15a3dd903 100644
--- a/apps/OpenSign/src/pages/PdfRequestFiles.js
+++ b/apps/OpenSign/src/pages/PdfRequestFiles.js
@@ -1,7 +1,13 @@
import React, { useState, useRef, useEffect } from "react";
-import { isEnableSubscription, themeColor } from "../constant/const";
+import {
+ isEnableSubscription,
+ rejectBtn,
+ submitBtn,
+ themeColor
+} from "../constant/const";
import { PDFDocument } from "pdf-lib";
import "../styles/signature.css";
+import Parse from "parse";
import axios from "axios";
import loader from "../assets/images/loader2.gif";
import { DndProvider } from "react-dnd";
@@ -25,7 +31,8 @@ import {
replaceMailVaribles,
fetchSubscription,
convertPdfArrayBuffer,
- contractUsers
+ contractUsers,
+ handleSendOTP
} from "../constant/Utils";
import Loader from "../primitives/LoaderWithMsg";
import HandleError from "../primitives/HandleError";
@@ -57,10 +64,12 @@ function PdfRequestFiles() {
const imageRef = useRef(null);
const [handleError, setHandleError] = useState();
const [selectWidgetId, setSelectWidgetId] = useState("");
+ const [otpLoader, setOtpLoader] = useState(false);
const [isLoading, setIsLoading] = useState({
isLoad: true,
message: "This might take some time"
});
+
const [defaultSignImg, setDefaultSignImg] = useState();
const [isDocId, setIsDocId] = useState(false);
const [pdfNewWidth, setPdfNewWidth] = useState();
@@ -100,6 +109,9 @@ function PdfRequestFiles() {
const [isSubscriptionExpired, setIsSubscriptionExpired] = useState(false);
const [extUserId, setExtUserId] = useState("");
const [pdfArrayBuffer, setPdfArrayBuffer] = useState("");
+ const [isEmailVerified, setIsEmailVerified] = useState(true);
+ const [isVerifyModal, setIsVerifyModal] = useState(false);
+ const [otp, setOtp] = useState("");
const divRef = useRef(null);
const isMobile = window.innerWidth < 767;
const rowLevel =
@@ -139,6 +151,41 @@ function PdfRequestFiles() {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [divRef.current]);
+ const handleReset = async (e) => {
+ e.preventDefault();
+ setOtpLoader(true);
+ await handleSendOTP(Parse.User.current().getEmail());
+ setOtpLoader(false);
+ alert("OTP sent on you email");
+ };
+ const handleVerifyEmail = async (e) => {
+ e.preventDefault();
+ setOtpLoader(true);
+ try {
+ const resEmail = await Parse.Cloud.run("verifyemail", {
+ otp: otp,
+ email: Parse.User.current().getEmail()
+ });
+ if (resEmail?.message === "Email is verified.") {
+ setIsEmailVerified(true);
+ } else if (resEmail?.message === "Email is already verified.") {
+ setIsEmailVerified(true);
+ }
+ setOtp("");
+ alert(resEmail.message);
+ setIsVerifyModal(false);
+ // handleRecipientSign();
+ } catch (error) {
+ alert(error.message);
+ } finally {
+ setOtpLoader(false);
+ }
+ };
+
+ const handleVerifyBtn = async () => {
+ setIsVerifyModal(true);
+ await handleSendOTP(Parse.User.current().getEmail());
+ };
async function checkIsSubscribed(extUserId, contactId) {
const isGuestSign = location.pathname.includes("/load/") || false;
const res = await fetchSubscription(extUserId, contactId, isGuestSign);
@@ -238,6 +285,22 @@ function PdfRequestFiles() {
setExpiredDate(expireDateFormat);
}
+ const isGuestSign = location.pathname.includes("/load/");
+ if (
+ !isGuestSign &&
+ !isCompleted &&
+ !declined &&
+ currDate < expireUpdateDate
+ ) {
+ const userQuery = new Parse.Query(Parse.User);
+ const user = await userQuery.get(jsonSender.objectId, {
+ sessionToken: localStorage.getItem("accesstoken")
+ });
+ if (user) {
+ const isEmailVerified = user?.get("emailVerified");
+ setIsEmailVerified(isEmailVerified);
+ }
+ }
if (documentData.length > 0) {
const checkDocIdExist =
documentData[0].AuditTrail &&
@@ -1179,6 +1242,83 @@ function PdfRequestFiles() {
headMsg="Document Expired!"
bodyMssg={`This document expired on ${expiredDate} and is no longer available to sign.`}
/>
+ {!isEmailVerified && (
+
+
+
+ OTP verification
+
+ {isVerifyModal ? (
+
+ ) : otpLoader ? (
+
+ ) : (
+
+
Please verify your email !
+
+
+
+
+
+ )}
+
+
+ )}
+
+ {/* {isVerifyModal && (
+
+ {otpLoader ? (
+
+ ) : (
+
+ )}
+
+ )} */}
+ {/* {!isEmailVerified && (
+ {
+ setValidateAlert(false);
+ }}
+ >
+
+
Please verify your email !
+
+
+
+
+
+ )} */}
>
)}
diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js
index d161c032b..30b6071e6 100644
--- a/apps/OpenSign/src/pages/PlaceHolderSign.js
+++ b/apps/OpenSign/src/pages/PlaceHolderSign.js
@@ -3,7 +3,12 @@ import axios from "axios";
import Parse from "parse";
import "../styles/signature.css";
import { PDFDocument } from "pdf-lib";
-import { isEnableSubscription, themeColor } from "../constant/const";
+import {
+ isEnableSubscription,
+ rejectBtn,
+ submitBtn,
+ themeColor
+} from "../constant/const";
import { DndProvider } from "react-dnd";
import { HTML5Backend } from "react-dnd-html5-backend";
import { useDrag, useDrop } from "react-dnd";
@@ -34,7 +39,8 @@ import {
replaceMailVaribles,
copytoData,
fetchSubscription,
- convertPdfArrayBuffer
+ convertPdfArrayBuffer,
+ handleSendOTP
} from "../constant/Utils";
import RenderPdf from "../components/pdf/RenderPdf";
import { useNavigate } from "react-router-dom";
@@ -84,6 +90,7 @@ function PlaceHolderSign() {
const [pdfOriginalWidth, setPdfOriginalWidth] = useState();
const [contractName, setContractName] = useState("");
const [containerWH, setContainerWH] = useState();
+ const [otpLoader, setOtpLoader] = useState(false);
const { docId } = useParams();
const signRef = useRef(null);
const dragRef = useRef(null);
@@ -124,6 +131,9 @@ function PlaceHolderSign() {
const [requestBody, setRequestBody] = useState("");
const [pdfArrayBuffer, setPdfArrayBuffer] = useState("");
const [activeMailAdapter, setActiveMailAdapter] = useState("");
+ const [isEmailVerified, setIsEmailVerified] = useState(false);
+ const [isVerifyModal, setIsVerifyModal] = useState(false);
+ const [otp, setOtp] = useState("");
const [isAlreadyPlace, setIsAlreadyPlace] = useState({
status: false,
message: ""
@@ -251,9 +261,63 @@ function PlaceHolderSign() {
navigate(`/subscription`);
}
}
+ const handleVerifyBtn = async () => {
+ setIsVerifyModal(true);
+ await handleSendOTP(Parse.User.current().getEmail());
+ };
+
+ const handleReset = async (e) => {
+ e.preventDefault();
+ setOtpLoader(true);
+ await handleSendOTP(Parse.User.current().getEmail());
+ setOtpLoader(false);
+ alert("OTP sent on you email");
+ };
+ const handleVerifyEmail = async (e) => {
+ e.preventDefault();
+ setOtpLoader(true);
+ try {
+ const resEmail = await Parse.Cloud.run("verifyemail", {
+ otp: otp,
+ email: Parse.User.current().getEmail()
+ });
+ if (resEmail?.message === "Email is verified.") {
+ setIsEmailVerified(true);
+ } else if (resEmail?.message === "Email is already verified.") {
+ setIsEmailVerified(true);
+ }
+ setOtp("");
+ alert(resEmail.message);
+ setIsVerifyModal(false);
+ handleRecipientSign();
+ } catch (error) {
+ alert(error.message);
+ } finally {
+ setOtpLoader(false);
+ }
+ };
+ const handleCloseVerifyModal = async () => {
+ setIsVerifyModal(false);
+ };
//function for get document details
const getDocumentDetails = async () => {
fetchTenantDetails();
+
+ const jsonSender = JSON.parse(
+ localStorage.getItem(
+ `Parse/${localStorage.getItem("parseAppId")}/currentUser`
+ )
+ );
+ // const isEmailVerified = Parse.User.current()?.attributes?.emailVerified;
+ const userQuery = new Parse.Query(Parse.User);
+ const user = await userQuery.get(jsonSender.objectId, {
+ sessionToken: localStorage.getItem("accesstoken")
+ });
+ if (user) {
+ const isEmailVerified = user?.get("emailVerified");
+ setIsEmailVerified(isEmailVerified);
+ }
+
//getting document details
const documentData = await contractDocument(documentId);
if (documentData && documentData.length > 0) {
@@ -1837,21 +1901,36 @@ function PlaceHolderSign() {
marginBottom: "15px"
}}
>
- {isCurrUser && (
-
- )}
+ {isCurrUser &&
+ (isEmailVerified ? (
+
+ ) : (
+
+ ))}