feat: api for createtemplate using base64 and binary

This commit is contained in:
prafull-opensignlabs
2024-01-24 23:17:44 +05:30
parent 07851ccde2
commit 55cfbae8a7
7 changed files with 62 additions and 67 deletions
+4 -14
View File
@@ -90,7 +90,7 @@ function GenerateToken() {
const handleModal = () => setIsModal(!isModal);
return (
<React.Fragment>
<Title title={"token"} />
<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
+2 -21
View File
@@ -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
@@ -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)
@@ -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
@@ -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!' });
}
@@ -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);
@@ -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', {