PK!A7��nconst userModel = require("../models/user"); const quickmessage = require("../models/quickMessage"); const emailIdModel = require("../models/EmailId"); const smsSenderIdModel = require("../models/senderId"); const reqLib = require("../library/request"); const accountCreditsModel = require("../models/accountCredits"); const http = require("http"); const https = require("https"); const dotenv = require("dotenv"); const jwt = require("jsonwebtoken"); const callerIdModel = require("../models/callerId"); const readXlsxFile = require("read-excel-file/node"); const excelJS = require("exceljs"); const fsPromises = require("fs").promises; const fs = require("fs"); const { join } = require("path"); const axios = require("axios"); const nodemailer = require("nodemailer"); const moment = require("moment"); dotenv.config(); const config = process.env; var multer = require("multer"); var forms = multer(); var randomstring = require("randomstring"); const { promisify } = require("util"); const util = require("util"); const mv = promisify(fs.rename); var pdf = require("pdf-creator-node"); const common = require("../helper/common"); const quickMessageReport = require("../models/quickMessageReport"); const quickMessageReportVoice = require("../models/quickMessageReportVoice"); const { json } = require("express"); const opts = { errorEventName: "error", logDirectory: "logs", fileNamePattern: "log-.log", dateFormat: "YYYY-MM-DD", }; const log = require("simple-node-logger").createRollingFileLogger(opts); async function adminGetAllSmsSenderIds(req, res) { const cName = "smsSenderId"; //controller's name const fName = "adminGetAllSmsSenderIds"; try { let { searchType, searchValue, endDate, startDate } = req.body; var userId = req.headers["id"]; const user = await userModel.isUserExist(userId); if (user && user.type == process.env.ADMIN_USER) { log.info(`[${cName}], [${fName}], [Not a admin user]`); return res.status(400).json({ msg: "Not a admin User" }); } log.info( `[${cName}], [${fName}], UserId [${userId}], SearchType [${searchType}], SearchValue [${searchValue}], Start Date [${startDate}], EndDate [${endDate}]` ); let SenderIds; if (searchValue) { if ("SENDER_ID" == searchType) { log.info( `[${cName}], [${fName}], [FILTER], Search Type [${searchType}], Search Value [${searchValue}] adminAllSmsSenderNamesSearchBySenderName` ); SenderIds = await smsSenderIdModel.adminAllSmsSenderNamesSearchBySenderName( searchValue, startDate, endDate ); } else if ("USER" == searchType) { log.info( `[${cName}], [${fName}], [FILTER], Search Type [${searchType}], Search Value [${searchValue}] adminAllSmsSenderNamesSearchBySenderName ` ); SenderIds = await smsSenderIdModel.allSmsSenderNamesSearchByUserName( searchValue, startDate, endDate ); } else { log.info(`[${cName}], [${fName}], [Fetch all sms sender ID]`); SenderIds = await smsSenderIdModel.allsmsSenderIds(startDate, endDate); } } else { log.info(`[${cName}], [${fName}], [Fetch all sms sender ID]`); SenderIds = await smsSenderIdModel.allsmsSenderIds(startDate, endDate); } // let SenderIds = await smsSenderIdModel.allsmsSenderIds(); const users = await userModel.getTotalCustomerUsers(); if (!SenderIds) { log.info(`[${cName}], [${fName}], [NO data found]`); return res.status(400).json({ msg: "No data found" }); } return res.status(200).json({ SenderIds, users }); } catch (e) { log.info(`[${cName}], [${fName}], [SERVER-ERROR] Error [${e}]`); return res.status(500).json(e); } } async function adminSMSSenderIdRequests(req, res) { const cName = "smsSenderId"; //controller's name const fName = "adminSMSSenderIdRequests"; try { var userId = req.headers["id"]; log.info(`[${cName}], [${fName}], User Id [${userId}]`); const user = await userModel.isUserExist(userId); if (user && user.status == process.env.ACTIVE) { const smsSenderIds = await smsSenderIdModel.allRquestforSmsSenderIds(); if (!smsSenderIds) { log.info(`[${cName}], [${fName}], [No request found]`); return res.status(400).json({ msg: "No request found" }); } log.info( `[${cName}], [${fName}], [SenderId request has been sent sucessfully]` ); return res.status(200).json(smsSenderIds); } else { log.info( `[${cName}],[${fName}], UserId [${userId}], [Not registered with us]` ); return res.status(400).json({ msg: "Not registered with us" }); } } catch (e) { log.info(`[${cName}], [${fName}], SERVER-ERROR [${e}]`); return res.status(500).json(e); } } async function requestSmsSenderId(req, res) { const cName = "smsSenderId"; //controller's name const fName = "requestSmsSenderId"; //Function Name try { const userId = req.headers["id"]; const user = await userModel.isUserExist(userId); if (user && user.status == process.env.ACTIVE) { const senderId = req.body["senderId"].toUpperCase(); log.info( `[${cName}], [${fName}], User Id [${userId}], SenserId [${senderId}]` ); if (!senderId) { log.info(`[${cName}], [${fName}], [SenderId Parameater missing]`); return res.status(400).json({ msg: "Parameater Missing" }); } const issenderIdExist = await smsSenderIdModel.issmssenderIdExist( senderId ); if (issenderIdExist) { log.info(`[${cName}], [${fName}], [SenderId already taken]`); return res.status(400).json({ msg: "SenderId already taken" }); } await smsSenderIdModel.addSmsSenderId(senderId, userId); log.info(`[${cName}], [${fName}], [SenderId is Requested Sucessfully]`); var getadmin = await userModel.getAdmin(process.env.ADMIN_USER); if (getadmin) { var getadmin = getadmin.filter((admin) => admin?.permissions?.includes(process.env.ADMIN_EMAIL_SENDER_ID) ); } //sms prt is commented getadmin.map(async (admindata) => { //try { let transporter = nodemailer.createTransport({ host: process.env.EMAIL_HOST, port: process.env.EMAIL_PORT, secure: false, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, }); log.info( `[smsSenderId], [requestsmsSenderId] Host [${process.env.EMAIL_HOST}], Port [${process.env.EMAIL_PORT}], Username [${process.env.EMAIL_USER}], password [${process.env.EMAIL_PASS}]` ); const baseURL = "https://api-gateway-services-uat.digitalpaygo.com/messaging/services/send/email"; const data = { appname: "Paygo Sms", to: admindata["email"], subject: "New Request for SMS Sender Id", // body: 'You have a request for sender id' body: `Hello ${admindata["name"]}, You have received a new request for a Sender ID. Please respond to this request promptly. You can approve or reject it here: https://smsgateway.digitalpaygo.com/cms/admin/sender-id-requests Thank you, ThinkStraight Team`, }; axios .post(baseURL, data) .then((response) => { log.info( `[smsSenderId], [requestsmsSenderId], [sendMail], Mail response [${JSON.stringify( response.data )}]` ); }) .catch((error) => { log.info( `[smsSenderId], [requestsmsSenderId], [sendMail], Mail response [${JSON.stringify( error )}]` ); }); }); return res.status(200).json({ msg: "SenderId requested sucessfully" }); } else { log.info(`[${cName}], [${fName}], [No User Found]`); return res.status(400).json({ msg: "No User Found" }); } } catch (e) { log.info(`[${cName}], [${fName}], Error [${e}]`); return res.status(500).json(e); } } async function adminSenderIdAction(req, res) { const cName = "smsSenderId"; //controller's name const fName = "adminSenderIdAction"; //Function Name try { var userId = req.headers["id"]; let { action, reason, senderId } = req.body; log.info( `[${cName}], [fName], User Id [${userId}],SenderId [${senderId}], Action [${action}], Reason [${reason}]` ); if (!action || !senderId) { log.info(`[${cName}], [${fName}], [Missing parameters]`); return res.status(400).json({ msg: "Missing parameters" }); } const user = await userModel.isUserExist(userId); if (user && user.status == process.env.ACTIVE) { if (action == 1) { await smsSenderIdModel.addsmsSenderIdApprove(2, userId, senderId); log.info(`[${cName}], [${fName}], [Sender ID approved]`); let senderDetail = await smsSenderIdModel.getsenderdetail(senderId); log.info(`[senderDetail], [${JSON.stringify(senderDetail)}]`); let transporter = nodemailer.createTransport({ host: process.env.EMAIL_HOST, port: process.env.EMAIL_PORT, secure: false, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, }); const baseURL = "https://api-gateway-services-uat.digitalpaygo.com/messaging/services/send/email"; const data = { appname: "Paygo Sms", to: senderDetail["email"], subject: "Request Approved Email Sender Name", // body: "Your sender id is approved", body: `Hello ${senderDetail["name"]}, We're pleased to inform you that your Sender ID "${senderDetail["sender_id"]}" has been approved. If you encounter any issues, please don't hesitate to contact our support team by visiting https://smsgateway.digitalpaygo.com/contact. Thank you, ThinkStraight Team`, }; axios .post(baseURL, data) .then((response) => { log.info( `[smsSenderId], [requestsmsSenderId], [sendMail], Mail response [${JSON.stringify( response.data )}]` ); }) .catch((error) => { log.info( `[smsSenderId], [requestsmsSenderId], [sendMail], Mail response [${JSON.stringify( error )}]` ); }); return res.status(200).json({ msg: "SenderId approved sucessfully" }); } await smsSenderIdModel.addSmsSenderIdDecline(3, userId, reason, senderId); log.info(`[${cName}], [${fName}], [SenderId decliened ]`); let senderDetail = await smsSenderIdModel.getsenderdetail(senderId); // try { let transporter = nodemailer.createTransport({ host: process.env.EMAIL_HOST, port: process.env.EMAIL_PORT, secure: false, auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, }); const baseURL = "https://api-gateway-services-uat.digitalpaygo.com/messaging/services/send/email"; const data = { appname: "Paygo Sms", to: senderDetail["email"], subject: "Request Approved Email Sender Name", body: "Your sender id is Decilned", }; axios .post(baseURL, data) .then((response) => { log.info( `[smsSenderId], [requestsmsSenderId], [sendMail], Mail response [${JSON.stringify( response.data )}]` ); }) .catch((error) => { log.info( `[smsSenderId], [requestsmsSenderId], [sendMail], Mail response [${JSON.stringify( error )}]` ); }); log.info(`[${cName}], [${fName}] [ SenderId declained]`); return res.status(200).json({ msg: "Sender Id has been declined" }); } else { log.info(`[${cName}], [${fName}] [No data found]`); return res.status(400).json({ msg: "No data Found" }); } } catch (e) { log.info(`[${cName}], [${fName}], Error [${e}]`); return res.status(500).json(e); } } async function adminAddSmsSenderid(req, res) { const cName = "smsSenderId"; //controller's name const fName = "adminAddSenderid"; //Function Name try { var userId = req.headers["id"]; let { usersId, senderId } = req.body; log.info( `[${cName}], [${fName}], ForUser [${usersId}], SenderId [${senderId}]` ); if (!senderId || !usersId) { log.info(`[${cName}], [${fName}], [Missing parameters]`); return res.status(400).json({ msg: "Missing parameters" }); } log.info(`[${cName}], [${fName}], UserId [${userId}]`); const user = await userModel.isUserExist(userId); if (user && user.status == process.env.ACTIVE) { const senderIdExist = await smsSenderIdModel.issmssenderIdExist( senderId.toUpperCase() ); if (senderIdExist) { log.info(`[${cName}], [${fName}], [SenderId is Taken]`); return res.status(400).json({ msg: "Sms Sender Id is taken " }); } await smsSenderIdModel.adminAddSmsSenderId(senderId, userId, usersId); log.info( `[${cName}], [${fName}], SenderId [${senderId}] Sender id Added` ); return res .status(200) .json({ msg: "Sms Sender Id Added Sucessfully " }); } else { log.info(`[${cName}], [${fName}], [No data found]`); return res.status(400).json({ msg: "No data Found" }); } } catch (e) { log.info(`[${cName}], [${fName}], Error [${e}]`); return res.status(500).json(e); } } async function deletesmsSenderId(req, res) { const cName = "smsSenderId"; //controller's name const fName = "deletesmsSenderId"; //Function Name try { var userId = req.headers["id"]; var rowId = req.body["rowId"]; log.info(`[${cName}], [${fName}], UserId [${userId}], RowId [${rowId}] `); if (!rowId) { log.info(`[${cName}], [${fName}], [Missing parameters]`); return res.status(400).json({ msg: "Missing parameters" }); } log.info(`[${cName}], [${fName}], User Id [${userId}]`); const user = await userModel.isUserExist(userId); if (user && user.status == process.env.ACTIVE) { await smsSenderIdModel.deleteSmsSenderId(rowId); log.info( `[${cName}], [${fName}],UserId [${userId}], [SMS Sender Id Deleted Successfully]` ); return res.status(200).json({ msg: "Sender Id Deleted Successfully" }); } else { log.info(`[${cName}], [${fName}], UserId [${userId}], [user not found]`); return res.status(400).json({ msg: "No data Found" }); } } catch (e) { log.info(`[${cName}], [${fName}], Error [${e}]`); return res.status(500).json(e); } } async function alluserSenderIds(req, res) { const cName = "smsSenderId"; //controller's name const fName = "allsmsSenderIds"; //Function Name try { var userId = req.headers["id"]; let { startDate, endDate, searchType, searchValue } = req.body; log.info( `[${cName}], [${fName}], User Id [${userId}], startDate [${startDate}], EndDate [${endDate}], SearchType [${searchType}], Search Value [${searchValue}] ` ); const user = await userModel.isUserExist(userId); if (user && user.status == process.env.ACTIVE) { let userSmsSenderId; if ("SENDER_ID" == searchType && searchValue) { log.info( `[${cName}], [${fName}], [FILTER], Search Type [${searchType}], Search Value [${searchValue}]` ); userSmsSenderId = await smsSenderIdModel.allSmsSenderNamesSearchBySenderName( searchValue, userId ); log.info(`data ${JSON.stringify(userSmsSenderId)}`); } else if ("USER" == searchType && searchValue) { log.info( `[${cName}], [${fName}], [FILTER], Search Type [${searchType}], Search Value [${searchValue}]` ); userSmsSenderId = await smsSenderIdModel.allSmsSenderNamesSearchByUserName(searchValue); } else { userSmsSenderId = await smsSenderIdModel.getSenderIds( userId, startDate, endDate ); } log.info( `[${cName}], [${fName}], [Sms Sender Id List has been sent successfully]` ); return res.status(200).json(userSmsSenderId); } else { log.info(`[${cName}], [${fName}], [No data found]`); return res.status(400).json({ msg: "No data Found" }); } } catch (e) { log.info(`[${cName}], [${fName}], Error [${e}]`); return res.status(500).json(e); } } async function editSmsSenderIds(req, res) { const cName = "smsSenderId"; //controller's name const fName = "editSmsSenderIds"; //Function Name try { var userId = req.headers["id"]; let { rowId, senderId } = req.body; log.info( `[${cName}], [${fName}], UserId [${userId}] RowId[${rowId}] SenderId [${senderId}]` ); const user = await userModel.isUserExist(userId); if (user && user.status == process.env.ACTIVE) { await smsSenderIdModel.editSmsSenderId(senderId.toUpperCase(), rowId); log.info( `${cName}], [${fName}], Userid [${userId}], [SenderId updated Sucessfully]` ); return res.status(200).json({ msg: "Sender ID Updated SucessFully" }); } log.info(`${cName}], [${fName}], [No data found]`); return res.status(400).json({ msg: "No data Found" }); } catch (e) { log.info(`${cName}], [${fName}], Error [${e}]`); return res.status(500).json(e); } } async function userlist(req, res) { const cName = "SenderId"; //controller's name const fName = "userlist"; //Function Name try { log.info(`[${cName}], [${fName}], [User List] `); const totalUser = await userModel.getActiveClientUsers(); if (totalUser) { log.info(`[${cName}], [${fName}], [Sending User List]`); return res.status(200).json({ totalUser }); } log.info(`[${cName}], [${fName}], [No Data Found]`); return res.status(200).json({ msg: "No Data Found" }); } catch (e) { log.info(`[${cName}], [${fName}] Error [${e}]`); return res.status(500).json(e); } } async function searchSenderIds(req, res) { const cName = "smsSenderId"; //controller's name const fName = "searchSenderIds"; //Function Name let { searchType, searchValue } = req.body; try { let smsSenderIds; if (!searchValue) { log.info(`[${cName}], [${fName}], [Fetch all sms sender ID]`); smsSenderIds = await smsSenderIdModel.allsmsSenderIds(); } if (process.env.SENDER_ID == searchType) { log.info( `[${cName}], [${fName}], [FILTER], Search Type [${searchType}], Search Value [${searchValue}]` ); smsSenderIds = await smsSenderIdModel.allSmsSenderNamesSearchBySenderName( searchValue ); } else if (process.env.USER == searchType) { log.info( `[${cName}], [${fName}], [FILTER], Search Type [${searchType}], Search Value [${searchValue}]` ); smsSenderIds = await smsSenderIdModel.allSmsSenderNamesSearchByUserName( searchValue ); } const users = await userModel.getTotalCustomerUsers( process.env.ACTIVE, process.env.USER_ACTIVE_STATE, process.env.CLIENT_USER ); log.info(`[${cName}], [${fName}], [Sending senderIds and users]`); return res .status(200) .json({ smsSenderIds: smsSenderIds || [], users: users || [] }); } catch (e) { log.info(`[${cName}], [${fName}] Error [${e}]`); return res.status(500).json(e); } } var self = (module.exports = { adminGetAllSmsSenderIds, adminSMSSenderIdRequests, requestSmsSenderId, adminSenderIdAction, adminAddSmsSenderid, deletesmsSenderId, alluserSenderIds, editSmsSenderIds, userlist, searchSenderIds, });