HEX
Server: Apache
System: Linux p3plzcpnl506847.prod.phx3.secureserver.net 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User: slfopp7cb1df (5698090)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/slfopp7cb1df/public_html/Call/master/controllers/validate.js
const twilio 	= require('twilio')

const client = twilio(
	process.env.TWILIO_ACCOUNT_SID,
	process.env.TWILIO_AUTH_TOKEN
)

module.exports.validateSetup = function (req, res) {
	if (!process.env.TWILIO_ACCOUNT_SID || process.env.TWILIO_ACCOUNT_SID.length !== 34) {
		res.status(500).json({ code: 'TWILIO_ACCOUNT_SID_INVALID'})
		return
	}

	if (!process.env.TWILIO_AUTH_TOKEN || process.env.TWILIO_AUTH_TOKEN.length !== 32) {
		res.status(500).json({ code: 'TWILIO_AUTH_TOKEN_INVALID'})
		return
	}

	if (!process.env.TWILIO_WORKSPACE_SID || process.env.TWILIO_WORKSPACE_SID.length !== 34) {
		res.status(500).json({ code: 'TWILIO_WORKSPACE_SID_INVALID'})
		return
	}

	validateAccount()
		.then(result => {
			return validateWorkspace()
		})
		.then(function (result) {
			return validateApplication(req.configuration.twilio.applicationSid)
		})
		.then(function (result) {
			return validatePhoneNumber(req, req.configuration.twilio.callerId)
		})
		.then(function () {
			return res.status(200).end()
		}).catch(error => {
			return res.status(500).json({ code: error})
		})

}

var validateApplication = function (applicationSid) {

	return new Promise((resolve, reject) => {

		if (!applicationSid) {
			return reject('TWILIO_APPLICATION_SID_INVALID')
		}

		client.applications(applicationSid).fetch().then(application => {
			resolve(true)
		}).catch(error => {
			console.error(error)
			reject('TWILIO_APPLICATION_NOT_ACCESSIBLE')
		})

	})

}

var validateAccount = function () {

	return new Promise((resolve, reject) => {

		client.api.accounts(process.env.TWILIO_ACCOUNT_SID).fetch()
			.then(account => {
				resolve(true)
			}).catch(error => {
				console.error(error)
				reject('TWILIO_ACCOUNT_NOT_ACCESSIBLE')
			})

	})

}

var validateWorkspace = function () {

	return new Promise((resolve, reject) => {
		client.taskrouter.v1.workspaces(process.env.TWILIO_WORKSPACE_SID).fetch()
			.then(account => {
				resolve(true)
			}).catch(error => {
				console.error(error)
				reject('TWILIO_WORKSPACE_NOT_ACCESSIBLE')
			})

	})

}

var validatePhoneNumber = function (req, phoneNumber) {

	return new Promise((resolve, reject) => {
		if (!phoneNumber) {
			reject('TWILIO_PHONE_NUMBER_UNKNOWN')
			return
		}

		const filter = {
			phoneNumber: phoneNumber
		}

		client.incomingPhoneNumbers.list(filter)
			.then(phoneNumbers => {
				if (phoneNumbers.length === 0) {
					reject('TWILIO_PHONE_NUMBER_UNKNOWN')
					return
				}

				/* validate if the voiceUrl is configured and points to this server */
				const voiceUrl = req.protocol + '://' + req.hostname + '/api/ivr/welcome'

				if (phoneNumbers[0].voiceUrl !== voiceUrl) {
					reject('TWILIO_PHONE_NUMBER_VOICE_URL_INVALID')
					return
				}

				resolve(true)
			}).catch(error => {
				console.error(error)
				reject('TWILIO_UNKNOWN_ERROR')
			})

	})

}