From 0576123a77787be0a18880dd606c3930d2ad9c1e Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Fri, 1 Dec 2023 18:04:05 +0530 Subject: [PATCH] add api for get, delete contact, getUser & get Documents --- .../cloud/customRoute/v1/apiV1.js | 34 ++++++++++ .../customRoute/v1/routes/deleteContact.js | 42 ++++++++++++ .../cloud/customRoute/v1/routes/getContact.js | 30 +++++++++ .../customRoute/v1/routes/getContacts.js | 29 ++++++++ .../customRoute/v1/routes/getDocument.js | 30 +++++++++ .../customRoute/v1/routes/getDocuments.js | 67 +++++++++++++++++++ .../cloud/customRoute/v1/routes/getUser.js | 27 ++++++++ apps/OpenSignServer/index.js | 4 ++ 8 files changed, 263 insertions(+) create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/apiV1.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/deleteContact.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/getContact.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/getContacts.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/getDocuments.js create mode 100644 apps/OpenSignServer/cloud/customRoute/v1/routes/getUser.js diff --git a/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js new file mode 100644 index 000000000..6e4eb839f --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/apiV1.js @@ -0,0 +1,34 @@ +//--npm modules +import express from 'express'; +import cors from 'cors'; +export const app = express(); +import dotenv from 'dotenv'; +import getUser from './routes/getUser.js'; +import getDocuments from './routes/getDocuments.js'; +import getDocument from './routes/getDocument.js'; +import getContact from './routes/getContact.js'; +import deleteContact from './routes/deleteContact.js'; +import getContacts from './routes/getContacts.js'; + +dotenv.config(); +app.use(cors()); +app.use(express.json({ limit: '50mb' })); +app.use(express.urlencoded({ limit: '50mb', extended: true })); + +// get user details whose api token used +app.get('/getuser', getUser); + +// get all types of documents on the basis of doctype +app.get('/getdocuments', getDocuments); + +// get Document on the basis of id +app.get('/document/:document_id', getDocument); + +// get contact on the basis of id +app.get('/contact/:contact_id', getContact); + +// soft delete contact +app.delete('/contact/:contact_id', deleteContact); + +// get list of contacts +app.get('/getcontacts', getContacts); diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteContact.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteContact.js new file mode 100644 index 000000000..89a3926d1 --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/deleteContact.js @@ -0,0 +1,42 @@ +export default async function deleteContact(request, response) { + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.json({ message: '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 id = token.get('Id'); + const userId = { __type: 'Pointer', className: '_User', objectId: id }; + const Contactbook = new Parse.Query('contracts_Contactbook'); + Contactbook.equalTo('objectId', request.params.contact_id); + Contactbook.equalTo('CreatedBy', userId); + const res = await Contactbook.first({ useMasterKey: true }); + if (res) { + const isDeleted = res.get('IsDeleted'); + if (isDeleted && isDeleted) { + return response.json({ code: 404, message: 'Record not found!' }); + } else { + const Contactbook = Parse.Object.extend('contracts_Contactbook'); + const deleteQuery = new Contactbook(); + deleteQuery.id = request.params.contact_id; + deleteQuery.set('IsDeleted', true); + const deleteRes = await deleteQuery.save(null, { useMasterKey: true }); + if (deleteRes) { + return response.json({ code: 200, result: 'Record delete successfully!' }); + } + } + } else { + return response.json({ code: 404, message: 'Record not found!' }); + } + } else { + return response.json({ code: 404, message: 'Invalid API Token!' }); + } + } catch (err) { + console.log('err ', err); + return response.json(err); + } +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getContact.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getContact.js new file mode 100644 index 000000000..3dcf56a24 --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getContact.js @@ -0,0 +1,30 @@ +export default async function getContact(request, response) { + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.json({ message: '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 id = token.get('Id'); + const userId = { __type: 'Pointer', className: '_User', objectId: id }; + const Contactbook = new Parse.Query('contracts_Contactbook'); + Contactbook.equalTo('objectId', request.params.contact_id); + Contactbook.equalTo('CreatedBy', userId); + const res = await Contactbook.first({ useMasterKey: true }); + if (res) { + return response.json({ code: 200, result: res }); + } else { + return response.json({ code: 404, message: 'Record not found!' }); + } + } else { + return response.json({ code: 404, message: 'Invalid API Token!' }); + } + } catch (err) { + console.log('err ', err); + return response.json(err); + } +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getContacts.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getContacts.js new file mode 100644 index 000000000..7c0eeaa9f --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getContacts.js @@ -0,0 +1,29 @@ +export default async function getContacts(request, response) { + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.json({ message: '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 id = token.get('Id'); + const userId = { __type: 'Pointer', className: '_User', objectId: id }; + const Contactbook = new Parse.Query('contracts_Contactbook'); + Contactbook.equalTo('CreatedBy', userId); + const res = await Contactbook.find({ useMasterKey: true }); + if (res && res.length > 0) { + return response.json({ code: 200, result: res }); + } else { + return response.json({ code: 200, result: [] }); + } + } else { + return response.json({ code: 404, message: 'Invalid API Token!' }); + } + } catch (err) { + console.log('err ', err); + return response.json(err); + } +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js new file mode 100644 index 000000000..2c5a7e98f --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocument.js @@ -0,0 +1,30 @@ +export default async function getDocument(request, response) { + try { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.json({ message: '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 id = token.get('Id'); + const userId = { __type: 'Pointer', className: '_User', objectId: id }; + const Document = new Parse.Query('contracts_Document'); + Document.equalTo('objectId', request.params.document_id); + Document.equalTo('CreatedBy', userId); + const res = await Document.first({ useMasterKey: true }); + if (res) { + return response.json({ code: 200, result: res }); + } else { + return response.json({ code: 404, message: 'Document not found!' }); + } + } else { + return response.json({ code: 404, message: 'Invalid API Token!' }); + } + } catch (err) { + console.log('err ', err); + return response.json(err); + } +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocuments.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocuments.js new file mode 100644 index 000000000..4450f248c --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getDocuments.js @@ -0,0 +1,67 @@ +import axios from 'axios'; +import reportJson from '../../../parsefunction/reportsJson.js'; +import dotenv from 'dotenv'; +dotenv.config(); + +export default async function getDocuments(request, response) { + const reqToken = request.headers['x-api-token']; + const appId = process.env.APP_ID; + const serverUrl = process.env.SERVER_URL; + if (!reqToken) { + return response.json({ message: '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 userId = token.get('Id'); + const docType = request.body.doctype; + const limit = request.body.limit; + const skip = request.body.skip; + let reportId; + switch (docType) { + case 'draftDocuments': + reportId = 'ByHuevtCFY'; + break; + case 'signatureRequest': + reportId = '4Hhwbp482K'; + break; + case 'inprogressDocuments': + reportId = '1MwEuxLEkF'; + break; + case 'completeDocuments': + reportId = 'kQUoW4hUXz'; + break; + case 'expiredDocuments': + reportId = 'zNqBHXHsYH'; + break; + case 'declinedDocuments': + reportId = 'UPr2Fm5WY3'; + break; + } + const json = reportId && reportJson(reportId, userId); + const clsName = 'contracts_Document'; + if (json) { + const { params, keys } = json; + const orderBy = '-updatedAt'; + const strParams = JSON.stringify(params); + const strKeys = keys.join(); + const headers = { + 'Content-Type': 'application/json', + 'X-Parse-Application-Id': appId, + 'X-Parse-Master-Key': process.env.MASTER_KEY, + }; + const url = `${serverUrl}/classes/${clsName}?where=${strParams}&keys=${strKeys}&order=${orderBy}&skip=${skip}&limit=${limit}&include=AuditTrail.UserPtr`; + const res = await axios.get(url, { headers: headers }); + if (res.data && res.data.results) { + return response.json({ code: 200, result: res.data.results }); + } else { + return response.json({ code: 200, result: [] }); + } + } else { + return response.json({ code: 404, message: 'Report is not available!' }); + } + } + return response.json({ code: 404, message: 'Invalid API Token!' }); +} diff --git a/apps/OpenSignServer/cloud/customRoute/v1/routes/getUser.js b/apps/OpenSignServer/cloud/customRoute/v1/routes/getUser.js new file mode 100644 index 000000000..300db2dfd --- /dev/null +++ b/apps/OpenSignServer/cloud/customRoute/v1/routes/getUser.js @@ -0,0 +1,27 @@ +import dotenv from 'dotenv'; +dotenv.config(); + +export default async function getUser(request, response) { + const reqToken = request.headers['x-api-token']; + if (!reqToken) { + return response.json({ message: '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 userId = token.get('Id'); + const query = new Parse.Query(Parse.User); + query.equalTo('objectId', userId); + query.exclude('authData'); + let user = await query.first({ useMasterKey: true }); + const result = user; + if (result) { + return response.json({ code: 200, result: result }); + } else { + return response.json({ code: 404, message: 'Record not found!' }); + } + } + return response.json({ code: 404, message: 'Invalid API Token!' }); +} diff --git a/apps/OpenSignServer/index.js b/apps/OpenSignServer/index.js index 819940954..c5b621de7 100644 --- a/apps/OpenSignServer/index.js +++ b/apps/OpenSignServer/index.js @@ -19,6 +19,7 @@ import AWS from 'aws-sdk'; import { app as customRoute } from './cloud/customRoute/customApp.js'; import { exec } from 'child_process'; import { createTransport } from 'nodemailer'; +import { app as v1 } from './cloud/customRoute/v1/apiV1.js'; const spacesEndpoint = new AWS.Endpoint(process.env.DO_ENDPOINT); // console.log("configuration ", configuration); @@ -162,6 +163,9 @@ if (!process.env.TESTING) { // Mount your custom express app app.use('/', customRoute); +// Mount v1 +app.use('/v1', v1); + // Parse Server plays nicely with the rest of your web routes app.get('/', function (req, res) { // res.statusCode = 200;