diff --git a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js index b9585b119..dcaa73259 100644 --- a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js +++ b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js @@ -21,6 +21,9 @@ import multer from 'multer'; import updateDocument from './routes/updateDocument.js'; import deleteDocument from './routes/deleteDocument.js'; import createDocumentWithTemplate from './routes/CreateDocumentWithTemplate.js'; +import saveWebhook from './routes/saveWebhook.js'; +import deleteWebhook from './routes/deleteWebhook.js'; +import getWebhook from './routes/getWebhook.js'; dotenv.config(); const storage = multer.memoryStorage(); @@ -77,3 +80,12 @@ app.delete('/template/:template_id', deletedTemplate); // get all types of documents on the basis of doctype app.get('/templatelist', getTemplatetList); + +// set and update webhook +app.get('/webhook', getWebhook); + +// set and update webhook +app.post('/webhook', saveWebhook); + +// set and update webhook +app.delete('/webhook', deleteWebhook); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteWebhook.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteWebhook.js new file mode 100644 index 000000000..b51be025a --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteWebhook.js @@ -0,0 +1,31 @@ +export default async function deleteWebhook(request, response) { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.status(400).json({ error: 'Please Provide API Token' }); + } + const tokenQuery = new Parse.Query('appToken'); + tokenQuery.equalTo('token', reqToken); + const token = await tokenQuery.first({ useMasterKey: true }); + if (token !== undefined) { + // Valid Token then proceed request + const userPtr = token.get('userId'); + const query = new Parse.Query('contracts_Users'); + query.equalTo('UserId', userPtr); + const user = await query.first({ useMasterKey: true }); + if (user) { + const updateQuery = new Parse.Object('contracts_Users'); + updateQuery.id = user.id; + updateQuery.unset('Webhook'); + const res = await updateQuery.save(null, { useMasterKey: true }); + if (res) { + return response.json({ + result: 'Webhook deleted successfully!', + }); + } + } else { + return response.status(404).json({ error: 'User not found!' }); + } + } else { + return response.status(405).json({ error: 'Invalid API Token!' }); + } +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getWebhook.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getWebhook.js new file mode 100644 index 000000000..9b55c3cf0 --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getWebhook.js @@ -0,0 +1,32 @@ +export default async function getWebhook(request, response) { + const Url = request.body.Url; + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.status(400).json({ error: 'Please Provide API Token' }); + } + const tokenQuery = new Parse.Query('appToken'); + tokenQuery.equalTo('token', reqToken); + const token = await tokenQuery.first({ useMasterKey: true }); + if (token !== undefined) { + // Valid Token then proceed request + const userPtr = token.get('userId'); + const query = new Parse.Query('contracts_Users'); + query.equalTo('UserId', userPtr); + const user = await query.first({ useMasterKey: true }); + if (user) { + const parseUser = JSON.parse(JSON.stringify(user)); + + if (parseUser && parseUser.Webhook) { + return response.json({ + Webhook: parseUser.Webhook, + }); + } else { + return response.json({}); + } + } else { + return response.status(404).json({ error: 'User not found!' }); + } + } else { + return response.status(405).json({ error: 'Invalid API Token!' }); + } +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/saveWebhook.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/saveWebhook.js new file mode 100644 index 000000000..3c2051a31 --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/saveWebhook.js @@ -0,0 +1,39 @@ +export default async function saveWebhook(request, response) { + const Url = request.body.Url; + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.status(400).json({ error: 'Please Provide API Token' }); + } + const tokenQuery = new Parse.Query('appToken'); + tokenQuery.equalTo('token', reqToken); + const token = await tokenQuery.first({ useMasterKey: true }); + if (token !== undefined) { + // Valid Token then proceed request + const userPtr = token.get('userId'); + const query = new Parse.Query('contracts_Users'); + query.equalTo('UserId', userPtr); + const user = await query.first({ useMasterKey: true }); + if (user) { + const parseUser = JSON.parse(JSON.stringify(user)); + const isUrlExist = parseUser?.Webhook && parseUser?.Webhook === Url; + + if (!isUrlExist) { + const updateQuery = new Parse.Object('contracts_Users'); + updateQuery.id = user.id; + updateQuery.set('Webhook', Url); + const res = await updateQuery.save(null, { useMasterKey: true }); + if (res) { + return response.json({ + result: 'Webhook updated successfully!', + }); + } + } else { + return response.status(401).json({ error: 'Webhook url already exists!' }); + } + } else { + return response.status(404).json({ error: 'User not found!' }); + } + } else { + return response.status(405).json({ error: 'Invalid API Token!' }); + } +}