diff --git a/apps/OpenSign/src/routes/GenerateToken.js b/apps/OpenSign/src/routes/GenerateToken.js index 1adc0f3e7..9c23bf344 100644 --- a/apps/OpenSign/src/routes/GenerateToken.js +++ b/apps/OpenSign/src/routes/GenerateToken.js @@ -90,7 +90,7 @@ function GenerateToken() { const handleModal = () => setIsModal(!isModal); return ( - + <Title title={"API Token"} /> {isGenerate && ( <Alert type="success">Token generated successfully!</Alert> )} @@ -115,9 +115,10 @@ function GenerateToken() { </div> ) : ( <div className="bg-white flex flex-col justify-center shadow rounded"> - <ul className="w-full flex flex-col p-2 text-sm"> + <h1 className="ml-4 mt-3 mb-2 font-semibold">API Token</h1> + <ul className="w-full flex flex-col p-2 text-sm"> <li - className={`flex justify-between items-center border-t-[1px] border-gray-300 break-all py-2`} + className={`flex justify-between items-center border-y-[1px] border-gray-300 break-all py-2`} > <span className="w-[40%]">Api Token:</span>{" "} <span @@ -128,17 +129,6 @@ function GenerateToken() { {apiToken && apiToken} </span> </li> - <li - className={`flex justify-between items-center border-y-[1px] border-gray-300 break-all py-2`} - > - <span className="w-[40%]">Application Id:</span>{" "} - <span - className="w-[60%] md:text-end cursor-pointer" - onClick={() => copytoclipboard(localStorage.getItem("AppID12"))} - > - {localStorage.getItem("AppID12")} - </span> - </li> </ul> <div className="flex flex-col md:flex-row items-center justify-center gap-2 pb-4"> <button diff --git a/apps/OpenSign/src/routes/Webhook.js b/apps/OpenSign/src/routes/Webhook.js index 2c1424ec5..c67e97b19 100644 --- a/apps/OpenSign/src/routes/Webhook.js +++ b/apps/OpenSign/src/routes/Webhook.js @@ -12,7 +12,6 @@ function Webhook() { const [parseAppId] = useState(localStorage.getItem("parseAppId")); const [webhook, setWebhook] = useState(); const [isLoader, setIsLoader] = useState(true); - const [copied, setCopied] = useState(false); const [isGenerate, setIsGenerate] = useState(false); const [isErr, setIsErr] = useState(false); const [isModal, setIsModal] = useState(false); @@ -77,19 +76,11 @@ function Webhook() { } }; - const copytoclipboard = (text) => { - navigator.clipboard.writeText(text); - setCopied(true); - setTimeout(() => { - setCopied(false); - }, 1500); // Reset copied state after 1.5 seconds - }; const handleModal = () => setIsModal(!isModal); return ( <React.Fragment> <Title title={"Webhook"} /> {isGenerate && <Alert type="success">Webhook added successfully!</Alert>} - {copied && <Alert type="success">Copied</Alert>} {isErr && <Alert type="danger">Something went wrong!</Alert>} {isLoader ? ( <div @@ -110,26 +101,16 @@ function Webhook() { </div> ) : ( <div className="bg-white flex flex-col justify-center shadow rounded"> + <h1 className="ml-4 mt-3 mb-2 font-semibold">Webhook</h1> <ul className="w-full flex flex-col p-2 text-sm"> <li - className={`flex justify-between items-center border-t-[1px] border-gray-300 break-all py-2`} + className={`flex justify-between items-center border-y-[1px] border-gray-300 break-all py-2`} > <span className="w-[40%]">Webhook:</span>{" "} <span id="token" className="w-[60%] md:text-end cursor-pointer"> {webhook && webhook} </span> </li> - <li - className={`flex justify-between items-center border-y-[1px] border-gray-300 break-all py-2`} - > - <span className="w-[40%]">Application Id:</span>{" "} - <span - className="w-[60%] md:text-end cursor-pointer" - onClick={() => copytoclipboard(localStorage.getItem("AppID12"))} - > - {localStorage.getItem("AppID12")} - </span> - </li> </ul> <div className="flex flex-col md:flex-row items-center justify-center gap-2 pb-4"> <button diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createContact.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createContact.js index 2079f059a..59aa21aa2 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createContact.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createContact.js @@ -131,7 +131,7 @@ export default async function createContact(request, response) { } catch (err) { console.log('err ', err); if (err.code === 137) { - return response.status(137).json({ error: 'Contact already exists!' }); + return response.status(401).json({ error: 'Contact already exists!' }); } else { return response .status(400) diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js index 0f2a1505d..c34601520 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createDocument.js @@ -7,10 +7,10 @@ export default async function createDocument(request, response) { const description = request.body.Description; const signers = request.body.Signers; const folderId = request.body.FolderId; - const base64File = request.body.file; + const base64File = request.body.File; const url = request?.get('host'); const fileData = request.files?.[0] ? request.files[0].buffer : null; - console.log('fileData ', fileData); + // console.log('fileData ', fileData); try { const reqToken = request.headers['x-api-token']; if (!reqToken) { @@ -76,7 +76,7 @@ export default async function createDocument(request, response) { contactbook.notEqualTo('IsDeleted', true); contactbook.containedIn('Email', parseSigners); const contactbookRes = await contactbook.find({ useMasterKey: true }); - console.log('contactbookRes ', contactbookRes); + // console.log('contactbookRes ', contactbookRes); const parseContactbookRes = JSON.parse(JSON.stringify(contactbookRes)); // console.log('userPtr ', userPtr); // const newContacts = parseSigners diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js index 83580707f..ecd48381a 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/createTemplate.js @@ -1,13 +1,13 @@ const randomId = () => Math.floor(1000 + Math.random() * 9000); export default async function createTemplate(request, response) { - const name = request.body.Title; - const note = request.body.Note; - const description = request.body.Description; - const signers = request.body.Signers; - const folderId = request.body.FolderId; - // const file = request.body.file; - const url = process.env.SERVER_URL; - const fileData = request.files[0] ? request.files[0].buffer : null; + const name = request.body?.Title; + const note = request.body?.Note; + const description = request.body?.Description; + const signers = request.body?.Signers; + const folderId = request.body?.FolderId; + const url = request?.get('host'); + const base64File = request.body.File; + const fileData = request.files?.[0] ? request.files[0].buffer : null; try { const reqToken = request.headers['x-api-token']; if (!reqToken) { @@ -19,13 +19,23 @@ export default async function createTemplate(request, response) { if (token !== undefined) { // Valid Token then proceed request const userPtr = token.get('userId'); - const file = new Parse.File(request.files?.[0]?.originalname, { - base64: fileData.toString('base64'), - }); - await file.save({ useMasterKey: true }); - const fileUrl = file.url(); + let fileUrl; + if (base64File) { + const file = new Parse.File(`${name}.pdf`, { + base64: base64File, + }); + await file.save({ useMasterKey: true }); + fileUrl = file.url(); + } else { + const file = new Parse.File(request.files?.[0]?.originalname, { + base64: fileData?.toString('base64'), + }); + await file.save({ useMasterKey: true }); + fileUrl = file.url(); + } + const contractsUser = new Parse.Query('contracts_Users'); - contractsUser.equalTo('UserId', userId); + contractsUser.equalTo('UserId', userPtr); const extUser = await contractsUser.first({ useMasterKey: true }); const extUserPtr = { __type: 'Pointer', className: 'contracts_Users', objectId: extUser.id }; @@ -43,17 +53,29 @@ export default async function createTemplate(request, response) { object.set('CreatedBy', userPtr); object.set('ExtUserPtr', extUserPtr); if (signers) { - const parseSigners = JSON.parse(signers); - const placeholders = parseSigners.map((x, i) => ({ - email: x, - Id: randomId(), - Role: 'User ' + (i + 1), - blockColor: '', - signerObjId: '', - signerPtr: {}, - placeHolder: [], - })); - object.set('Placeholders', placeholders); + let parseSigners; + if (base64File) { + parseSigners = signers; + } else { + parseSigners = JSON.parse(signers); + } + + const contactbook = new Parse.Query('contracts_Contactbook'); + contactbook.containedIn('Email', parseSigners); + contactbook.equalTo('UserId', userPtr); + contactbook.notEqualTo('IsDeleted', true); + const contactbookRes = await contactbook.find({ useMasterKey: true }); + // console.log('contactbookRes ', contactbookRes); + const parseContactbookRes = JSON.parse(JSON.stringify(contactbookRes)); + + object.set( + 'Signers', + parseContactbookRes?.map(x => ({ + __type: 'Pointer', + className: 'contracts_Contactbook', + objectId: x.objectId, + })) + ); } if (folderId) { object.set('Folder', folderPtr); @@ -65,7 +87,10 @@ export default async function createTemplate(request, response) { newACL.setWriteAccess(userPtr.id, true); object.setACL(newACL); const res = await object.save(null, { useMasterKey: true }); - return response.json({ objectId: res.id, url: url }); + return response.json({ + objectId: res.id, + url: 'https://' + url + '/load/signmicroapp/template/' + res.id, + }); } else { return response.status(405).json({ error: 'Invalid API Token!' }); } diff --git a/apps/OpenSignServer/cloud/parsefunction/TemplateAfterSave.js b/apps/OpenSignServer/cloud/parsefunction/TemplateAfterSave.js index d5bcc168a..556cf1c39 100644 --- a/apps/OpenSignServer/cloud/parsefunction/TemplateAfterSave.js +++ b/apps/OpenSignServer/cloud/parsefunction/TemplateAfterSave.js @@ -13,7 +13,7 @@ export default async function TemplateAfterSave(request) { } } } else { - if (request.user) { + if (request?.user) { const signers = request.object.get('Signers'); if (signers && signers.length > 0) { await updateAclDoc(request.object.id); diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js index 49be44df9..ee778c228 100644 --- a/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js +++ b/apps/OpenSignServer/cloud/parsefunction/pdf/PDF.min.js @@ -112,7 +112,6 @@ async function sendDoctoWebhook(t) { .post(t?.data?.ExtUserPtr?.Webhook, e, { headers: { 'Content-Type': 'application/json' } }) .then(e => { try { - console.log('res ', e); var a = new Parse.Object('contracts_Webhook'); a.set('Log', e?.status), a.set('UserId', {