@wickr-sample-integrations/wickrio-example-app
Version:
WickrIO Node.js API example app
1,379 lines (1,268 loc) • 74.7 kB
JavaScript
const fs = require('fs')
const path = require('path')
const WickrIOAPI = require('wickrio_addon');
const WickrIOBotAPI = require('wickrio-bot-api');
const WickrUser = WickrIOBotAPI.WickrUser;
const bot = new WickrIOBotAPI.WickrIOBot();
const apiService = bot.apiService();
var bot_username
var output_filename
//so the program will not close instantly
process.stdin.resume();
// Used to wait for commands to finish
const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))
async function exitHandler(options, err) {
try {
var closed = await bot.close();
if (err || options.exit) {
console.log("Exit reason:", err);
process.exit();
} else if (options.pid) {
process.kill(process.pid);
}
} catch (err) {
console.log(err);
}
}
//catches ctrl+c and stop.sh events
process.on('SIGINT', exitHandler.bind(null, {
exit: true
}));
// catches "kill pid" (for example: nodemon restart)
process.on('SIGUSR1', exitHandler.bind(null, {
pid: true
}));
process.on('SIGUSR2', exitHandler.bind(null, {
pid: true
}));
//catches uncaught exceptions
process.on('uncaughtException', exitHandler.bind(null, {
exit: true
}));
async function main() {
try {
bot.processesJsonToProcessEnv()
var tokens = JSON.parse(process.env.tokens);
var status;
if (process.argv[2] === undefined) {
if (tokens.BOT_USERNAME !== undefined) {
bot_username = tokens.BOT_USERNAME.value;
} else if (tokens.WICKRIO_BOT_NAME !== undefined) {
bot_username = tokens.WICKRIO_BOT_NAME.value
} else {
exitHandler(null, {
exit: true,
reason: 'Client username not found!'
});
}
status = await bot.start(bot_username)
} else {
status = await bot.start(process.argv[2])
}
if (!status) {
exitHandler(null, {
exit: true,
reason: 'Client not able to start'
});
}
// The following call passes a callback function to the bot API.
// The listen function will be called for each message received.
console.log("starting to listen")
await bot.startListening(listen);
} catch (err) {
console.log(err);
}
}
function outputtestmessage(message) {
if (output_filename) {
} else {
console.log(message)
}
}
async function testapis(filename) {
var fd = fs.openSync(filename, 'w')
fs.writeSync(fd, "Starting to run WickrIO Addon API tests\n")
var num_success = 0
var num_failure = 0
var num_cantrun = 0
var num_notcoded = 0
// clientInit
// This was done when the bot started, not testable
// closeClient
// isConnected
// getClientState
fs.writeSync(fd, "**********************************************************\n")
console.log('testing getClientState')
try {
var result = await WickrIOAPI.getClientState()
if (result) {
fs.writeSync(fd, 'getClientState: success: ' + result + '\n')
num_success++
} else {
fs.writeSync(fd, 'getClientState: failed: returned empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'getClientState: failed: ' + err + '\n')
num_failure++
}
// cmdStartAsyncRecvMessages
num_notcoded++
// cmdStopAsyncRecvMessages
num_notcoded++
// cmdSetMsgCallback
const msgCallbackURL="https://msgCallback"
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdSetMsgCallback')
try {
var result = await WickrIOAPI.cmdSetMsgCallback(msgCallbackURL)
if (result) {
fs.writeSync(fd, 'cmdSetMsgCallback: success: ' + result + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSetMsgCallback: failed: returned empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSetMsgCallback: failed: ' + err + '\n')
num_failure++
}
// cmdGetMsgCallback
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetMsgCallback')
try {
var result = await WickrIOAPI.cmdGetMsgCallback()
if (result) {
const response = isJson(result)
if (response !== false && response.callback === msgCallbackURL) {
fs.writeSync(fd, 'cmdGetMsgCallback: success: ' + result + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetMsgCallback: failed: returned different value from what was set: ' + result + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdGetMsgCallback: failed: returned empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetMsgCallback: failed: ' + err + '\n')
num_failure++
}
// cmdDeleteMsgCallback
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdDeleteMsgCallback')
try {
var result = await WickrIOAPI.cmdDeleteMsgCallback()
if (result) {
fs.writeSync(fd, 'cmdDeleteMsgCallback: success: ' + result + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdDeleteMsgCallback: failed: returned empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdDeleteMsgCallback: failed: ' + err + '\n')
num_failure++
}
// cmdSetEventCallback
const eventCallbackURL="https://eventCallback"
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdSetEventCallback')
try {
var result = await WickrIOAPI.cmdSetEventCallback(eventCallbackURL)
if (result) {
fs.writeSync(fd, 'cmdSetEventCallback: success: ' + result + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSetEventCallback: failed: returned empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSetEventCallback: failed: ' + err + '\n')
num_failure++
}
// cmdGetEventCallback
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetEventCallback')
try {
var result = await WickrIOAPI.cmdGetEventCallback()
if (result) {
const response = isJson(result)
if ((response !== false) && (response.callback === eventCallbackURL)) {
fs.writeSync(fd, 'cmdGetEventCallback: success: ' + result + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetEventCallback: failed: returned different value from what was set: ' + result + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdGetEventCallback: failed: returned empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetEventCallback: failed: ' + err + '\n')
num_failure++
}
// cmdDeleteEventCallback
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdDeleteEventCallback')
try {
var result = await WickrIOAPI.cmdDeleteEventCallback()
if (result) {
fs.writeSync(fd, 'cmdDeleteEventCallback: success: ' + result + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdDeleteEventCallback: failed: returned empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdDeleteEventCallback: failed: ' + err + '\n')
num_failure++
}
// cmdPostEvent
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdPostEvent')
try {
var result = await WickrIOAPI.cmdPostEvent("This is a test event, please disregard.")
if (result) {
fs.writeSync(fd, 'cmdPostEvent: success: ' + result + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdPostEvent: failed: returned empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdPostEvent: failed: ' + err + '\n')
num_failure++
}
// cmdGetDirectory
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetDirectory')
// Global variable that can be used by following tests
var directoryUsers = undefined
try {
const directory = await WickrIOAPI.cmdGetDirectory('0', '100')
if (directory) {
directoryUsers = isJson(directory)
fs.writeSync(fd, 'cmdGetDirectory: first 10 users:\n')
fs.writeSync(fd, 'cmdGetDirectory: success: ' + directory + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetDirectory: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetDirectory: failed: ' + err + '\n')
num_failure++
}
// cmdGetSecurityGroups
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetSecurityGroups')
// Global variable that can be used by following tests
var securityGroups = undefined
try {
var security = await WickrIOAPI.cmdGetSecurityGroups()
if (security) {
securityGroups = isJson(security)
fs.writeSync(fd, 'cmdGetSecurityGroups: success: ' + security + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetSecurityGroups: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetSecurityGroups: failed: ' + err + '\n')
num_failure++
}
// cmdGetSecurityGroupDirectory
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetSecurityGroupDirectory')
if (securityGroups === undefined) {
fs.writeSync(fd, 'cmdGetSecurityGroupDirectory: securityGroups list is undefined!\n')
num_cantrun++
} else if (securityGroups.size === 0) {
fs.writeSync(fd, 'cmdGetSecurityGroupDirectory: securityGroups list is empty!\n')
num_cantrun++
} else {
try {
const securityGroup = securityGroups[0].id
if (securityGroup === undefined) {
fs.writeSync(fd, 'cmdGetSecurityGroupDirectory: securityGroup is undefined!\n')
num_failure++
} else {
var securityGroupUsers = await WickrIOAPI.cmdGetSecurityGroupDirectory(securityGroup, '0', '10')
if (securityGroupUsers) {
users = isJson(securityGroupUsers)
if (users.length > 10) {
fs.writeSync(fd, 'cmdGetSecurityGroupDirectory: failed: returned list with too many entries!\n')
num_failure++
} else {
fs.writeSync(fd, 'cmdGetSecurityGroupDirectory: first 10 users:\n')
fs.writeSync(fd, 'cmdGetSecurityGroupDirectory: success: ' + securityGroupUsers + '\n')
num_success++
}
} else {
fs.writeSync(fd, 'cmdGetSecurityGroupDirectory: failed: returned empty list\n')
num_failure++
}
}
} catch (err) {
fs.writeSync(fd, 'cmdGetSecurityGroupDirectory: failed: ' + err + '\n')
num_failure++
}
}
// cmdGetStatistics
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetStatistics')
try {
var statistics = await WickrIOAPI.cmdGetStatistics()
var response = isJson(statistics)
fs.writeSync(fd, 'cmdGetStatistics: success: ' + statistics + '\n')
num_success++
} catch (err) {
fs.writeSync(fd, 'cmdGetStatistics: failed: ' + err + '\n')
num_failure++
}
// cmdClearStatistics
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdClearStatistics')
try {
var cleared = await WickrIOAPI.cmdClearStatistics()
fs.writeSync(fd, "cmdClearStatistics: success: " + cleared + '\n')
num_success++
} catch (err) {
fs.writeSync(fd, 'cmdClearStatistics: failed: ' + err + '\n')
num_failure++
}
// /*
// * Room APIs
// */
// We must have a list of users to proceed with these tests!
if (!directoryUsers || directoryUsers.length < 2) {
fs.writeSync(fd, "**********************************************************\n")
fs.writeSync(fd, 'Not enoughh directory users to run Room tests!\n')
num_cantrun += 5
} else {
// Room value setup
// var roomMembers = [bot_username, directoryUsers[0].name ]
//var roomModerators = [bot_username, directoryUsers[0].name ]
var roomMembers = [bot_username, directoryUsers[0].name ]
var roomModerators = [bot_username]
}
// cmdAddRoom
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdAddRoom')
var roomVGroupID = undefined
try {
const response = await WickrIOAPI.cmdAddRoom(roomMembers, roomModerators, 'TEST: TestRoom', 'Test Room Description')
if (response) {
const result = isJson(response)
roomVGroupID = result.vgroupid
fs.writeSync(fd, "cmdAddRoom: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdAddRoom: failed:\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdAddRoom: failed: ' + err + '\n')
num_failure++
}
// cmdGetRoom
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetRoom')
if (roomVGroupID) {
try {
const response = await WickrIOAPI.cmdGetRoom(roomVGroupID)
if (response) {
fs.writeSync(fd, "cmdGetRoom: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetRoom: failed: empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetRoom: failed: ' + err + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdGetRoom: room was not added or now VGroupID!\n')
num_cantrun++
}
// cmdModifyRoom
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdModifyRoom')
if (roomVGroupID) {
// modify the title and the description
try {
const newTitle = 'TEST: TestRoomUpdated'
const newDescr = 'Test Room Description Updated'
const response = await WickrIOAPI.cmdModifyRoom(roomVGroupID, roomMembers, roomModerators, newTitle, newDescr)
if (response) {
const getResponse = await WickrIOAPI.cmdGetRoom(roomVGroupID)
const getResult = isJson(getResponse)
if (getResult.title === newTitle && getResult.description === newDescr) {
fs.writeSync(fd, "cmdModifyRoom: modify title/description success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, "cmdModifyRoom: didn't change the title/description failed: " + getResponse + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdModifyRoom: modify title/description failed: empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdModifyRoom: modify title/description failed: ' + err + '\n')
num_failure++
}
const newRoomMembers = [bot_username, directoryUsers[0].name ]
const newRoomModerators = [bot_username, directoryUsers[0].name ]
try {
const response = await WickrIOAPI.cmdModifyRoom(roomVGroupID, newRoomMembers, newRoomModerators, 'TEST: TestRoomUpdated', 'Test Room Description Updated')
if (response) {
const getResponse = await WickrIOAPI.cmdGetRoom(roomVGroupID)
const getResult = isJson(getResponse)
if (getResult.members.length === newRoomMembers.length && getResult.masters.length === newRoomModerators.length) {
fs.writeSync(fd, "cmdModifyRoom: modify members/moderators success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, "cmdModifyRoom: didn't change the members/moderators failed: " + getResponse + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdModifyRoom: modify members/moderators failed: empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdModifyRoom: modify members/moderators failed: ' + err + '\n')
num_failure++
}
}
else {
fs.writeSync(fd, 'cmdModifyRoom: room was not added or now VGroupID!\n')
num_cantrun += 2
}
// cmdSendRoomMessage
if (!roomVGroupID) {
fs.writeSync(fd, "**********************************************************\n")
fs.writeSync(fd, 'No VGroupID to send message tests!\n')
num_cantrun += 3
} else {
// cmdSendRoomMessage
fs.writeSync(fd, "**********************************************************\n")
try {
const response = await WickrIOAPI.cmdSendRoomMessage(roomVGroupID, "this is a test message for Room convos")
if (response) {
fs.writeSync(fd, "cmdSendRoomMessage: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSendRoomMessage: failed:\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSendRoomMessage: failed: ' + err + '\n')
num_failure++
}
// cmdSendRoomAttachment
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdSendRoomAttachment')
const attachmentName = path.join(process.cwd(), filename)
try {
const response = await WickrIOAPI.cmdSendRoomAttachment(roomVGroupID, attachmentName, 'testfile.txt')
if (response) {
fs.writeSync(fd, "cmdSendRoomAttachment: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSendRoomAttachment: failed: empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSendRoomAttachment: failed: ' + err + '\n')
num_failure++
}
}
// cmdLeaveRoom
num_notcoded++
// cmdGetRooms
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetRooms')
var rooms = undefined
try {
const response = await WickrIOAPI.cmdGetRooms()
rooms = isJson(response)
fs.writeSync(fd, "cmdGetRooms: success: " + response + '\n')
num_success++
} catch (err) {
fs.writeSync(fd, 'cmdGetRooms: failed: ' + err + '\n')
num_failure++
}
// cmdDeleteRoom
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdDeleteRoom')
var roomDeleteFailed=false
if (rooms && rooms.rooms && rooms.rooms.length > 0) {
for (let i=0; i<rooms.rooms.length; i++) {
const element = rooms.rooms[i]
if (element.title.startsWith('TEST:')) {
fs.writeSync(fd, "cmdDeleteRoom: trying to delete: " + element.vgroupid + '\n')
try {
const response = await WickrIOAPI.cmdDeleteRoom(element.vgroupid)
if (response) {
fs.writeSync(fd, 'cmdDeleteRoom: success\n')
} else {
fs.writeSync(fd, 'cmdDeleteRoom: failed: empty value\n')
roomDeleteFailed=true
}
} catch (err) {
fs.writeSync(fd, 'cmdDeleteRoom: failed: ' + err + '\n')
roomDeleteFailed=true
}
} else {
fs.writeSync(fd, "cmdDeleteRoom: skipping to delete: " + element.vgroupid + '\n')
}
}
if (roomDeleteFailed) {
num_failure++
} else {
num_success++
}
} else {
fs.writeSync(fd, 'cmdDeleteRoom: there are no rooms to delete!\n')
num_cantrun += 2
}
// cmdGetGroupConvos
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetGroupConvos')
var groupConvos = undefined
try {
const response = await WickrIOAPI.cmdGetGroupConvos()
if (response) {
groupConvos = isJson(response)
fs.writeSync(fd, 'cmdGetGroupConvos: success: ' + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetGroupConvos: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetGroupConvos: failed: ' + err + '\n')
num_failure++
}
// cmdDeleteGroupConvo
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdDeleteGroupConvo')
var groupConvoDeleteFailed=false
if (groupConvos && groupConvos.groupconvos && groupConvos.groupconvos.length > 0) {
for (let i=0; i<groupConvos.groupconvos.length; i++) {
const element = groupConvos.groupconvos[i]
fs.writeSync(fd, "cmdDeleteGroupConvo: trying to delete: " + element.vgroupid + '\n')
try {
const response = await WickrIOAPI.cmdDeleteGroupConvo(element.vgroupid)
if (response) {
fs.writeSync(fd, 'cmdDeleteGroupConvo: success\n')
} else {
fs.writeSync(fd, 'cmdDeleteGroupConvo: failed: empty value\n')
groupConvoDeleteFailed=true
}
} catch (err) {
fs.writeSync(fd, 'cmdDeleteGroupConvo: failed: ' + err + '\n')
groupConvoDeleteFailed=true
}
}
if (groupConvoDeleteFailed) {
num_failure++
} else {
num_success++
}
} else {
fs.writeSync(fd, 'cmdDeleteGroupConvo: there are no group convos to delete!\n')
num_cantrun++
}
// We must have a list of users to proceed with these tests!
if (!directoryUsers || directoryUsers.length < 2) {
fs.writeSync(fd, "**********************************************************\n")
fs.writeSync(fd, 'Not enough directory users to run Group tests!\n')
num_cantrun += 3
} else {
// Group value setup
var groupMembers = [bot_username, directoryUsers[0].name]
// cmdAddGroupConvo
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdAddGroupConvo')
var groupVGroupID = undefined
try {
const response = await WickrIOAPI.cmdAddGroupConvo(groupMembers)
if (response) {
const result = isJson(response)
groupVGroupID = result.vgroupid
fs.writeSync(fd, "cmdAddGroupConvo: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdAddGroupConvo: failed:\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdAddGroupConvo: failed: ' + err + '\n')
num_failure++
}
}
// cmdGetGroupConvo
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetGroupConvo')
if (groupVGroupID) {
try {
const response = await WickrIOAPI.cmdGetGroupConvo(groupVGroupID)
if (response) {
fs.writeSync(fd, "cmdGetGroupConvo: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetGroupConvo: failed: empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetGroupConvo: failed: ' + err + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdGetGroupConvo: group was not added or now VGroupID!\n')
num_cantrun++
}
// cmdGetReceivedMessage
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetReceivedMessage')
try {
const response = await WickrIOAPI.cmdGetReceivedMessage()
if (response) {
fs.writeSync(fd, 'cmdGetReceivedMessage: success: ' + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetReceivedMessage: success: returned empty list\n')
num_success++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetReceivedMessage: failed: ' + err + '\n')
num_failure++
}
/*
* Global list of users to send messages/attachments to
*/
var sendToUsers = []
if (directoryUsers && directoryUsers.length > 2) {
directoryUsers.forEach(element => {
if (element.name !== bot_username && element.is_bot !== true) {
sendToUsers.push(element.name)
}
});
}
// cmdSend1to1Message
if (sendToUsers.length === 0) {
fs.writeSync(fd, "**********************************************************\n")
fs.writeSync(fd, 'No users to send messages tests!\n')
num_cantrun += 3
} else {
// cmdSend1to1Message
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdSend1to1Message')
try {
const response = await WickrIOAPI.cmdSend1to1Message(sendToUsers, "this is a test message for DM convos")
if (response) {
fs.writeSync(fd, "cmdSend1to1Message: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSend1to1Message: failed:\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSend1to1Message: failed: ' + err + '\n')
num_failure++
}
// cmdSend1to1Attachment
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdSend1to1Attachment')
const attachmentName = path.join(process.cwd(), filename)
try {
const response = await WickrIOAPI.cmdSend1to1Attachment(sendToUsers, attachmentName, 'testfile.txt')
if (response) {
fs.writeSync(fd, "cmdSend1to1Attachment: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSend1to1Attachment: failed: empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSend1to1Attachment: failed: ' + err + '\n')
num_failure++
}
// create a User Name file with the list of users from the sendToUsers array
const userNameFile = 'userNameFile.txt'
var unamefd = fs.openSync('userNameFile.txt', 'w')
sendToUsers.forEach(userName => {
fs.writeSync(unamefd, userName + "\n")
})
fs.closeSync(unamefd)
const userNameFilePath = path.join(process.cwd(), userNameFile)
// cmdSendMessageUserNameFile
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdSendMessageUserNameFile')
try {
const response = await WickrIOAPI.cmdSendMessageUserNameFile(userNameFilePath, "this is a test message using a UserName file")
if (response) {
fs.writeSync(fd, "cmdSendMessageUserNameFile: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSendMessageUserNameFile: failed:\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSendMessageUserNameFile: failed: ' + err + '\n')
num_failure++
}
// cmdSendMessageUserHashFile
num_notcoded++
// cmdSendAttachmentUserNameFile
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdSendAttachmentUserNameFile')
try {
const response = await WickrIOAPI.cmdSendAttachmentUserNameFile(userNameFilePath, attachmentName, 'testfile.txt')
if (response) {
fs.writeSync(fd, "cmdSendAttachmentUserNameFile: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSendAttachmentUserNameFile: failed: empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSendAttachmentUserNameFile: failed: ' + err + '\n')
num_failure++
}
// cmdSendAttachmentUserHashFile
num_notcoded++
}
// cmdSendVoiceMemoUserNameFile
num_notcoded++
// cmdSendVoiceMemoUserHashFile
num_notcoded++
// cmdSendNetworkMessage
num_notcoded++
// cmdSendSecurityGroupMessage
num_notcoded++
// cmdSendNetworkAttachment
num_notcoded++
// cmdSendSecurityGroupAttachment
num_notcoded++
// cmdSendNetworkVoiceMemo
num_notcoded++
// cmdSendSecurityGroupVoiceMemo
num_notcoded++
// cmdEncryptString
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdEncryptString')
const origString='This is a test string 123456 !@#$%'
var encryptedString = undefined
var encryptStringSuccess = undefined
try {
encryptedString = await WickrIOAPI.cmdEncryptString(origString)
if (encryptedString) {
fs.writeSync(fd, 'cmdEncryptString: success: ' + encryptedString + '\n')
num_success++
encryptStringSuccess = true
} else {
fs.writeSync(fd, 'cmdEncryptString: failed!\n')
num_failure++
encryptStringSuccess = false
}
} catch (err) {
fs.writeSync(fd, 'cmdEncryptString: failed: ' + err + '\n')
num_failure++
}
// cmdDecryptString
fs.writeSync(fd, "**********************************************************\n")
if (encryptStringSuccess) {
try {
console.log("Encrypted string:", encryptedString)
const response = await WickrIOAPI.cmdDecryptString(encryptedString)
if (response) {
if (response === origString) {
fs.writeSync(fd, 'cmdDecryptString: success: ' + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdDecryptString: returned string is not equal to original: ' + response + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdDecryptString: failed!\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdDecryptString: failed: ' + err + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdDecryptString: string was not encrypted!\n')
num_cantrun++
}
// cmdAddKeyValue
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdAddKeyValue')
const keyName='KeyName123'
const keyValue='KeyValue123'
var addKeyValueSuccess = undefined
try {
const response = await WickrIOAPI.cmdAddKeyValue(keyName, keyValue)
if (response) {
fs.writeSync(fd, 'cmdAddKeyValue: success!\n')
num_success++
addKeyValueSuccess = true
} else {
fs.writeSync(fd, 'cmdAddKeyValue: failed!\n')
num_failure++
addKeyValueSuccess = false
}
} catch (err) {
fs.writeSync(fd, 'cmdAddKeyValue: failed: ' + err + '\n')
num_failure++
}
// cmdGetKeyValue
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetKeyValue')
if (addKeyValueSuccess) {
try {
const response = await WickrIOAPI.cmdGetKeyValue(keyName)
if (response) {
fs.writeSync(fd, 'cmdGetKeyValue: success: ' + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetKeyValue: failed!\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetKeyValue: failed: ' + err + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdGetKeyValue: Key Value was not added!\n')
num_cantrun++
}
// cmdDeleteKeyValue
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdDeleteKeyValue')
if (addKeyValueSuccess) {
try {
const response = await WickrIOAPI.cmdDeleteKeyValue(keyName)
if (response) {
fs.writeSync(fd, 'cmdDeleteKeyValue: success: ' + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdDeleteKeyValue: failed!\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdDeleteKeyValue: failed: ' + err + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdDeleteKeyValue: Key Value was not added!\n')
num_cantrun++
}
// cmdClearAllKeyValues
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdClearAllKeyValues')
try {
const response = await WickrIOAPI.cmdClearAllKeyValues()
if (response) {
fs.writeSync(fd, 'cmdClearAllKeyValues: success!\n')
num_success++
addKeyValueSuccess = true
} else {
fs.writeSync(fd, 'cmdClearAllKeyValues: failed!\n')
num_failure++
addKeyValueSuccess = false
}
} catch (err) {
fs.writeSync(fd, 'cmdClearAllKeyValues: failed: ' + err + '\n')
num_failure++
}
// cmdSetControl
num_notcoded++
// cmdAddMessageID
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdAddMessageID')
const messageID='ABC123'
var addMsgIdSuccess = undefined
try {
const response = await WickrIOAPI.cmdAddMessageID(messageID, bot_username, 'target', 'date', 'This is a test message')
if (response) {
fs.writeSync(fd, 'cmdAddMessageID: success!\n')
num_success++
addMsgIdSuccess = true
} else {
fs.writeSync(fd, 'cmdAddMessageID: failed!\n')
num_failure++
addMsgIdSuccess = false
}
} catch (err) {
fs.writeSync(fd, 'cmdAddMessageID: failed: ' + err + '\n')
num_failure++
}
// cmdGetMessageIDEntry
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetMessageIDEntry')
if (addMsgIdSuccess) {
try {
const response = await WickrIOAPI.cmdGetMessageIDEntry(messageID)
if (response) {
fs.writeSync(fd, 'cmdGetMessageIDEntry: success: ' + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetMessageIDEntry: failed!\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetMessageIDEntry: failed: ' + err + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdGetMessageIDEntry: message ID was not added!\n')
num_cantrun++
}
// cmdGetMessageIDTable
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetMessageIDTable')
try {
var result = await WickrIOAPI.cmdGetMessageIDTable("0", "10")
if (result) {
const response = isJson(result)
fs.writeSync(fd, 'cmdGetMessageIDTable: success: ' + result + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetMessageIDTable: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetMessageIDTable: failed: ' + err + '\n')
num_failure++
}
// cmdDeleteMessageID
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdDeleteMessageID')
if (addMsgIdSuccess) {
try {
const response = await WickrIOAPI.cmdDeleteMessageID(messageID)
if (response) {
fs.writeSync(fd, 'cmdDeleteMessageID: success!\n')
num_success++
} else {
fs.writeSync(fd, 'cmdDeleteMessageID: failed!\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdDeleteMessageID: failed: ' + err + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdDeleteMessageIDEntry: message ID was not added!\n')
num_cantrun++
}
// cmdCancelMessageID
num_notcoded++
// cmdGetMessageStatus
num_notcoded++
// cmdSetMessageStatus
num_notcoded++
// cmdSendDeleteMessage
num_notcoded++
// cmdSendRecallMessage
num_notcoded++
// cmdGetVerificationList
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetVerificationList')
try {
var verList = await WickrIOAPI.cmdGetVerificationList()
if (verList) {
const response = isJson(verList)
fs.writeSync(fd, 'cmdGetVerificationList: success: ' + verList + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetVerificationList: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetVerificationList: failed: ' + err + '\n')
num_failure++
}
// cmdVerifyUsers
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdVerifyUsers')
if (directoryUsers === undefined) {
fs.writeSync(fd, 'cmdVerifyUsers: directoryUsers list is undefined!\n')
num_cantrun++
} else if (directoryUsers.size === 0) {
fs.writeSync(fd, 'cmdVerifyUsers: directoryUsers list is empty!\n')
num_cantrun++
} else {
try {
const user = [ directoryUsers[0].name ]
if (user === undefined) {
fs.writeSync(fd, 'cmdVerifyUsers: user name is undefined!\n')
num_failure++
} else {
const response = await WickrIOAPI.cmdVerifyUsers(user)
if (response) {
fs.writeSync(fd, 'cmdVerifyUsers: success: ' + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdVerifyUsers: failed: returned empty response\n')
num_failure++
}
}
} catch (err) {
fs.writeSync(fd, 'cmdVerifyUsers: failed: ' + err + '\n')
num_failure++
}
}
// cmdVerifyAll
fs.writeSync(fd, "**********************************************************\n")
try {
var verList = await WickrIOAPI.cmdVerifyAll()
if (verList) {
fs.writeSync(fd, 'cmdVerifyAll: success: ' + verList + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdVerifyAll: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdVerifyAll: failed: ' + err + '\n')
num_failure++
}
// cmdSetVerificationMode
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdSetVerificationMode')
try {
var verList = await WickrIOAPI.cmdSetVerificationMode("automatic")
if (verList) {
fs.writeSync(fd, 'cmdSetVerificationMode: success: ' + verList + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSetVerificationMode: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSetVerificationMode: failed: ' + err + '\n')
num_failure++
}
// cmdGetUserInfo
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetUserInfo')
if (directoryUsers === undefined) {
fs.writeSync(fd, 'cmdGetUserInfo: directoryUsers list is undefined!\n')
num_cantrun++
} else if (securityGroups.size === 0) {
fs.writeSync(fd, 'cmdGetUserInfo: directoryUsers list is empty!\n')
num_cantrun++
} else {
try {
const user = [ directoryUsers[0].name ]
if (user === undefined) {
fs.writeSync(fd, 'cmdGetUserInfo: user name is undefined!\n')
num_failure++
} else {
var userInfo = await WickrIOAPI.cmdGetUserInfo(user)
if (userInfo) {
fs.writeSync(fd, 'cmdGetUserInfo: success: ' + userInfo + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetUserInfo: failed: returned empty list\n')
num_failure++
}
}
} catch (err) {
fs.writeSync(fd, 'cmdGetUserInfo: failed: ' + err + '\n')
num_failure++
}
}
// cmdGetServerInfo
var serverInfo = undefined
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetServerInfo')
try {
var verList = await WickrIOAPI.cmdGetServerInfo()
if (verList) {
serverInfo = isJson(verList)
fs.writeSync(fd, 'cmdGetServerInfo: success: ' + verList + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetServerInfo: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetServerInfo: failed: ' + err + '\n')
num_failure++
}
// cmdGetClientInfo
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetClientInfo')
try {
var verList = await WickrIOAPI.cmdGetClientInfo()
if (verList) {
const response = isJson(verList)
fs.writeSync(fd, 'cmdGetClientInfo: success: ' + verList + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetClientInfo: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetClientInfo: failed: ' + err + '\n')
num_failure++
}
// cmdGetNetworkRooms
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetNetworkRooms')
if (serverInfo !== undefined) {
try {
const response = await WickrIOAPI.cmdGetNetworkRooms(serverInfo.network_id)
if (verList) {
fs.writeSync(fd, 'cmdGetNetworkRooms: success: ' + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetNetworkRooms: failed: returned empty list\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetNetworkRooms: failed: ' + err + '\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdGetNetworkRooms: get server info is empty!\n')
num_cantrun++
}
// cmdGetBotsList
// Can't implement this without Token Credentials
// cmdGetTransmitQueueInfo
fs.writeSync(fd, "**********************************************************\n")
console.log('testing cmdGetTransmitQueueInfo')
try {
var verList = await WickrIOAPI.cmdGetTransmitQueueInfo()
if (verList) {
const response = isJson(verList)
fs.writeSync(fd, 'cmdGetTransmitQueueInfo: success: ' + verList + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdGetTransmitQueueInfo: failed: returned empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdGetTransmitQueueInfo: failed: ' + err + '\n')
num_failure++
}
console.log('testing DONE')
// SUMMARY
fs.writeSync(fd, "**********************************************************\n")
fs.writeSync(fd, 'Number of success:' + num_success + '\n')
fs.writeSync(fd, 'Number of failure:' + num_failure + '\n')
fs.writeSync(fd, 'Number cannot run:' + num_cantrun + '\n')
fs.writeSync(fd, 'Number not coded :' + num_notcoded + '\n')
fs.writeSync(fd, "**********************************************************\n")
return {
'num_success' : num_success,
'num_failure' : num_failure,
'num_cantrun' : num_cantrun,
'num_notcoded' : num_notcoded,
}
fs.closeSync(fd)
}
async function fileIsDeleted(attachmentCopyName)
{
await sleep(1000)
if (!fs.existsSync(attachmentCopyName))
return true;
await sleep(1000)
if (!fs.existsSync(attachmentCopyName))
return true;
await sleep(1000)
if (!fs.existsSync(attachmentCopyName))
return true;
await sleep(1000)
if (!fs.existsSync(attachmentCopyName))
return true;
await sleep(1000)
if (!fs.existsSync(attachmentCopyName))
return true;
return false
}
/**
* This function will current test the ability to send attachments
* and have those sent files removed after they have been sent.
*/
async function testsendattachments(filename, userEmail, vGroupID) {
var fd = fs.openSync(filename, 'w')
fs.writeSync(fd, "Starting to run WickrIO send attachment API tests\n")
var num_success = 0
var num_failure = 0
var num_cantrun = 0
var num_notcoded = 0
const attachmentName = path.join(process.cwd(), filename)
let attachmentCopyName = '';
const sendToUsers = [userEmail]
/******************************************************************************
* Tests of the wickrio_addon APIs
*****************************************************************************/
/*
* cmdSend1to1Attachment
*/
fs.writeSync(fd, "**********************************************************\n")
// Copy the attachment file to the copy file, so we don't lose the attachment file
attachmentCopyName = path.join(process.cwd(), 'test_send_1to1_attachment.txt')
fs.copyFileSync(attachmentName, attachmentCopyName);
try {
const response = await WickrIOAPI.cmdSend1to1Attachment(sendToUsers, attachmentCopyName, 'test_send_1to1_attachment.txt', '', '', '', true)
if (response) {
if (fileIsDeleted(attachmentCopyName)) {
fs.writeSync(fd, "cmdSend1to1Attachment: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSend1to1Attachment: failed to remove the file with 5 seconds\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdSend1to1Attachment: failed: empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSend1to1Attachment: failed: ' + err + '\n')
num_failure++
}
/*
* cmdSend1to1Attachment with a URL
*/
fs.writeSync(fd, "**********************************************************\n")
const urlFileName='https:\/\/images.freeimages.com\/images\/large-previews\/7c0\/bird-1310808.jpg'
try {
const response = await WickrIOAPI.cmdSend1to1Attachment(sendToUsers, urlFileName, 'bird-1310808.jpg', '', '', '', true)
if (response) {
if (fileIsDeleted(attachmentCopyName)) {
fs.writeSync(fd, "cmdSend1to1Attachment.URL: success: " + response + '\n')
num_success++
} else {
fs.writeSync(fd, 'cmdSend1to1Attachment.URL: failed to remove the file with 5 seconds\n')
num_failure++
}
} else {
fs.writeSync(fd, 'cmdSend1to1Attachment.URL: failed: empty value\n')
num_failure++
}
} catch (err) {
fs.writeSync(fd, 'cmdSend1to1Attachment.URL: failed: ' + err + '\n')
num_failure++
}
/*
* cmdSendAttachmentUserNameFile
*/
fs.writeSync(fd, "**********************************************************\n")
// create a User Name file with the list of users from the sendToUsers array
const userNameFile = 'userNameFile.txt'
var unamefd = fs.openSync('userNameFile.txt', 'w')
sendTo