Port minify from voicemail project

This commit is contained in:
Christopher Cookman 2023-10-03 19:50:26 -06:00
parent 50b0303a67
commit 82527cb46a
Signed by: ChrisChrome
GPG key ID: A023A26E42C33A42
2 changed files with 118 additions and 111 deletions

151
funcs.js
View file

@ -1,5 +1,84 @@
// Some random functions, as to not clutter the main file // Some random functions, as to not clutter the main file
// Generate GraphQL query
const generateQuery = (type, args) => {
switch (type) {
case 'lookup':
return minifyQuery(`query {
fetchExtension(extensionId: "${args.ext}") {
user {
extension
name
extPassword
voicemail
}
}
fetchVoiceMail(extensionId: "${args.ext}") {
password
email
}
}`);
break;
case 'list':
return minifyQuery(`query {
fetchAllExtensions {
extension {
user {
extension
name
}
}
}
}`);
break;
case 'add':
return minifyQuery(`mutation {
addExtension(input: {
extensionId: "${args.ext}"
name: "${args.name}"
email: "${args.uid}"
vmEnable: true
vmPassword: "${args.ext}"
maxContacts: "5"
umEnable: false
}) {
status
}
}`);
break;
case 'delete':
return minifyQuery(`mutation {
deleteExtension(input: {extensionId: ${args.ext}}) {
status
}
}`);
break;
case 'reload':
return minifyQuery(`mutation {
doreload(input: {clientMutationId: "${args.id}"}) {
status
}
}`);
break;
case 'update_name':
return minifyQuery(`mutation {
updateCoreUser (input: {extension: ${args.ext}, name: "${args.name}", noanswer_cid: "", busy_cid: "", chanunavail_cid: "", busy_dest: "", noanswer_dest: "", chanunavail_dest: ""}) {
coreuser {
name
}
}
}`);
}
}
// minify query function
const minifyQuery = (query) => {
return query.replace(/\s+/g, ' ').trim();
}
module.exports = { module.exports = {
generateQuery,
minifyQuery,
// Input validation // Input validation
validateInput: function (input, type) { validateInput: function (input, type) {
switch (type) { switch (type) {
@ -14,77 +93,5 @@ module.exports = {
return true; return true;
break; break;
} }
}, },
// Generate GraphQL query
generateQuery: function (type, args) {
switch (type) {
case 'lookup':
return `query {
fetchExtension(extensionId: "${args.ext}") {
user {
extension
name
extPassword
voicemail
}
}
fetchVoiceMail(extensionId: "${args.ext}") {
password
email
}
}`
break;
case 'list':
return `query {
fetchAllExtensions {
extension {
user {
extension
name
}
}
}
}`;
break;
case 'add':
return `mutation {
addExtension(input: {
extensionId: "${args.ext}"
name: "${args.name}"
email: "${args.uid}"
vmEnable: true
vmPassword: "${args.ext}"
maxContacts: "5"
umEnable: false
}) {
status
}
}`;
break;
case 'delete':
return `mutation {
deleteExtension(input: {extensionId: ${args.ext}}) {
status
}
}`;
break;
case 'reload':
return `mutation {
doreload(input: {clientMutationId: "${args.id}"}) {
status
}
}`;
break;
case 'update_name':
return `mutation {
updateCoreUser (input: {extension: ${args.ext}, name: "${args.name}", noanswer_cid: "", busy_cid: "", chanunavail_cid: "", busy_dest: "", noanswer_dest: "", chanunavail_dest: ""}) {
coreuser {
name
}
}
}`;
}
}
} }

View file

@ -25,7 +25,7 @@ const cdrPool = mariadb.createPool(config.cdrdb);
const getExtCount = () => { const getExtCount = () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
pbxClient.request(funcs.generateQuery('list', {})).then((result) => { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('list', {}))).then((result) => {
resolve(result.fetchAllExtensions.extension.length); resolve(result.fetchAllExtensions.extension.length);
}).catch((error) => { }).catch((error) => {
reject(error); reject(error);
@ -36,9 +36,9 @@ const getExtCount = () => {
const createExtension = (ext, name, uid) => { const createExtension = (ext, name, uid) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
pbxClient.request(funcs.generateQuery('lookup', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('lookup', {
ext: ext ext: ext
})).then((result) => { }))).then((result) => {
// Extension exists // Extension exists
res = { res = {
"status": "exists", "status": "exists",
@ -46,17 +46,17 @@ const createExtension = (ext, name, uid) => {
resolve(res); resolve(res);
}).catch((error) => { }).catch((error) => {
// Extension does not exist, create it, reload, look it up, and return the result // Extension does not exist, create it, reload, look it up, and return the result
pbxClient.request(funcs.generateQuery('add', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('add', {
ext: ext, ext: ext,
name: name, name: name,
uid: uid uid: uid
})).then((result) => { }))).then((result) => {
pbxClient.request(funcs.generateQuery('reload', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('reload', {
id: "CreateExt" id: "CreateExt"
})).then((result) => { }))).then((result) => {
pbxClient.request(funcs.generateQuery('lookup', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('lookup', {
ext: ext ext: ext
})).then((result) => { }))).then((result) => {
res = { res = {
"status": "created", "status": "created",
"result": result "result": result
@ -76,12 +76,12 @@ const createExtension = (ext, name, uid) => {
} }
const fixNames = () => { // Gonna leave this here if I ever need it in the future const fixNames = () => { // Gonna leave this here if I ever need it in the future
pbxClient.request(funcs.generateQuery("list", {})).then((result) => { pbxClient.request(funcs.minifyQuery(funcs.generateQuery("list", {}))).then((result) => {
let extensions = result.fetchAllExtensions.extension; let extensions = result.fetchAllExtensions.extension;
extensions.forEach((extension) => { extensions.forEach((extension) => {
pbxClient.request(funcs.generateQuery("lookup", { pbxClient.request(funcs.minifyQuery(funcs.generateQuery("lookup", {
ext: extension.user.extension ext: extension.user.extension
})).then((result) => { }))).then((result) => {
// Get discord user // Get discord user
dcClient.users.fetch(result.fetchVoiceMail.email).then((user) => { dcClient.users.fetch(result.fetchVoiceMail.email).then((user) => {
// Update extension name // Update extension name
@ -112,12 +112,12 @@ const deleteExtension = (ext) => {
WHERE cid_num = ${ext} WHERE cid_num = ${ext}
`); `);
conn.end(); conn.end();
pbxClient.request(funcs.generateQuery('delete', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('delete', {
ext: ext ext: ext
})).then((result) => { }))).then((result) => {
pbxClient.request(funcs.generateQuery('reload', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('reload', {
id: "DeleteExt" id: "DeleteExt"
})).then((result) => { }))).then((result) => {
res = { res = {
"status": "deleted", "status": "deleted",
"result": result "result": result
@ -134,16 +134,16 @@ const deleteExtension = (ext) => {
const updateName = (ext, name) => { const updateName = (ext, name) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
pbxClient.request(funcs.generateQuery('lookup', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('lookup', {
ext: ext ext: ext
})).then((result) => { }))).then((result) => {
pbxClient.request(funcs.generateQuery('update_name', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('update_name', {
ext: ext, ext: ext,
name: name name: name
})).then((result) => { }))).then((result) => {
pbxClient.request(funcs.generateQuery('reload', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('reload', {
id: "UpdateName" id: "UpdateName"
})).then((result) => { }))).then((result) => {
res = { res = {
"status": "updated", "status": "updated",
"result": result "result": result
@ -165,7 +165,7 @@ const generateExtensionListEmbed = async () => {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
try { try {
var conn = await cdrPool.getConnection(); var conn = await cdrPool.getConnection();
const result = await pbxClient.request(funcs.generateQuery("list", {})); const result = await pbxClient.request(funcs.minifyQuery(funcs.generateQuery("list", {})));
let extensions = result.fetchAllExtensions.extension; let extensions = result.fetchAllExtensions.extension;
let extensionList = {}; let extensionList = {};
@ -250,9 +250,9 @@ const lookupExtension = (ident, type) => { // type is either "ext" or "uid"
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
switch (type) { switch (type) {
case "ext": case "ext":
pbxClient.request(funcs.generateQuery('lookup', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('lookup', {
ext: ident ext: ident
})).then((result) => { }))).then((result) => {
res = { res = {
"status": "exists", "status": "exists",
"result": result "result": result
@ -268,15 +268,15 @@ const lookupExtension = (ident, type) => { // type is either "ext" or "uid"
break; break;
case "uid": case "uid":
// Find the extension based on Discord ID in the voicemail email field // Find the extension based on Discord ID in the voicemail email field
pbxClient.request(funcs.generateQuery('list', {})).then(async (result) => { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('list', {}))).then(async (result) => {
// loop through all extensions, run a lookup on each one, and return the first one that matches // loop through all extensions, run a lookup on each one, and return the first one that matches
var found = false; var found = false;
var ext = ""; var ext = "";
var count = 0; var count = 0;
result.fetchAllExtensions.extension.forEach(async (ext) => { result.fetchAllExtensions.extension.forEach(async (ext) => {
pbxClient.request(funcs.generateQuery('lookup', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('lookup', {
ext: ext.user.extension ext: ext.user.extension
})).then((result) => { }))).then((result) => {
if (result.fetchVoiceMail.email == ident && !found) { if (result.fetchVoiceMail.email == ident && !found) {
found = true; found = true;
ext = result; ext = result;
@ -312,7 +312,7 @@ const lookupExtension = (ident, type) => { // type is either "ext" or "uid"
const findNextExtension = () => { const findNextExtension = () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
pbxClient.request(funcs.generateQuery('list', {})).then((result) => { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('list', {}))).then((result) => {
// Find the highest extension // Find the highest extension
var highest = 0; var highest = 0;
// output looks like {fetchAllExtensions: { extension: [{user:{extension: 100, name: "Test"}}]}} // output looks like {fetchAllExtensions: { extension: [{user:{extension: 100, name: "Test"}}]}}
@ -548,7 +548,7 @@ dcClient.on('ready', async () => {
// Lookup all extensions and check if they're still in the server // Lookup all extensions and check if they're still in the server
// If they're not, delete them // If they're not, delete them
// Run once on startup // Run once on startup
pbxClient.request(funcs.generateQuery("list", {})).then((result) => { pbxClient.request(funcs.minifyQuery(funcs.generateQuery("list", {}))).then((result) => {
let extensions = result.fetchAllExtensions.extension; let extensions = result.fetchAllExtensions.extension;
extensions.forEach((extension) => { extensions.forEach((extension) => {
lookupExtension(extension.user.extension, "ext").then((result) => { lookupExtension(extension.user.extension, "ext").then((result) => {
@ -582,7 +582,7 @@ dcClient.on('ready', async () => {
limit: 1 limit: 1
}).then((messages) => { }).then((messages) => {
if (messages.size == 0) { if (messages.size == 0) {
pbxClient.request(funcs.generateQuery("list", {})).then((result) => { pbxClient.request(funcs.minifyQuery(funcs.generateQuery("list", {}))).then((result) => {
let extensions = result.fetchAllExtensions.extension; let extensions = result.fetchAllExtensions.extension;
// key:value pairs of extension:username // key:value pairs of extension:username
let extensionList = {}; let extensionList = {};
@ -601,7 +601,7 @@ dcClient.on('ready', async () => {
}) })
}) })
} else { } else {
pbxClient.request(funcs.generateQuery("list", {})).then((result) => { pbxClient.request(funcs.minifyQuery(funcs.generateQuery("list", {}))).then((result) => {
let extensions = result.fetchAllExtensions.extension; let extensions = result.fetchAllExtensions.extension;
// key:value pairs of extension:username // key:value pairs of extension:username
let extensionList = {}; let extensionList = {};
@ -627,7 +627,7 @@ dcClient.on('ready', async () => {
limit: 1 limit: 1
}).then((messages) => { }).then((messages) => {
if (messages.size == 0) { if (messages.size == 0) {
pbxClient.request(funcs.generateQuery("list", {})).then((result) => { pbxClient.request(funcs.minifyQuery(funcs.generateQuery("list", {}))).then((result) => {
let extensions = result.fetchAllExtensions.extension; let extensions = result.fetchAllExtensions.extension;
// key:value pairs of extension:username // key:value pairs of extension:username
let extensionList = {}; let extensionList = {};
@ -646,7 +646,7 @@ dcClient.on('ready', async () => {
}); });
}) })
} else { } else {
pbxClient.request(funcs.generateQuery("list", {})).then((result) => { pbxClient.request(funcs.minifyQuery(funcs.generateQuery("list", {}))).then((result) => {
let extensions = result.fetchAllExtensions.extension; let extensions = result.fetchAllExtensions.extension;
// key:value pairs of extension:username // key:value pairs of extension:username
let extensionList = {}; let extensionList = {};
@ -932,9 +932,9 @@ dcClient.on('interactionCreate', async interaction => {
if (result.length == 0) { if (result.length == 0) {
// They're not in the group, add them // They're not in the group, add them
conn.query(`INSERT INTO paging_groups (\`ext\`, \`page_number\`) VALUES (${ext}, ${group})`).then((result) => { conn.query(`INSERT INTO paging_groups (\`ext\`, \`page_number\`) VALUES (${ext}, ${group})`).then((result) => {
pbxClient.request(funcs.generateQuery('reload', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('reload', {
id: "UpdatePaging" id: "UpdatePaging"
})).then(() => { }))).then(() => {
interaction.editReply({ interaction.editReply({
content: "Added you to the paging group!", content: "Added you to the paging group!",
ephemeral: true ephemeral: true
@ -969,9 +969,9 @@ dcClient.on('interactionCreate', async interaction => {
} else { } else {
// They're in the group, remove them // They're in the group, remove them
conn.query(`DELETE FROM paging_groups WHERE ext = ${ext} AND \`page_number\` = ${group}`).then((result) => { conn.query(`DELETE FROM paging_groups WHERE ext = ${ext} AND \`page_number\` = ${group}`).then((result) => {
pbxClient.request(funcs.generateQuery('reload', { pbxClient.request(funcs.minifyQuery(funcs.generateQuery('reload', {
id: "UpdatePaging" id: "UpdatePaging"
})).then(() => { }))).then(() => {
interaction.editReply({ interaction.editReply({
content: "Removed you from the paging group!", content: "Removed you from the paging group!",
ephemeral: true ephemeral: true