Port minify from voicemail project
This commit is contained in:
parent
50b0303a67
commit
82527cb46a
151
funcs.js
151
funcs.js
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
76
index.js
76
index.js
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue