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/agents.js
const twilio = require('twilio')

const AccessToken = twilio.jwt.AccessToken

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

const taskrouterHelper = require('./helpers/taskrouter-helper.js')

module.exports.login = function (req, res) {
	const friendlyName = req.body.worker.friendlyName

	const filter = { friendlyName: friendlyName }

	client.taskrouter
		.workspaces(process.env.TWILIO_WORKSPACE_SID)
		.workers.list(filter)
		.then(workers => {

			let worker = workers.find(worker => worker.friendlyName === friendlyName)

			if (worker) {
				const tokens = createWorkerTokens(
					req.configuration,
					worker,
					req.body.endpoint
				)

				req.session.tokens = tokens
				req.session.worker = {
					sid: worker.sid,
					friendlyName: worker.friendlyName,
					attributes: worker.attributes
				}

				res.status(200).end()
			} else {
				res.status(404).end()
			}

		})
		.catch(error => {
			res.status(500).send(res.convertErrorToJSON(error))
		})
}

var createWorkerTokens = function (configuration, worker, endpoint) {
	/* all token we generate are valid for 1 hour */
	const lifetime = 3600

	/* create a token for Twilio TaskRouter */
	const workerCapability = taskrouterHelper.createWorkerCapabilityToken(
		worker.sid
	)

	const accessToken = new AccessToken(
		process.env.TWILIO_ACCOUNT_SID,
		process.env.TWILIO_API_KEY_SID,
		process.env.TWILIO_API_KEY_SECRET,
		{ ttl: lifetime }
	)

	accessToken.identity = worker.friendlyName.toLowerCase()

	/* grant the token Twilio Programmable Chat capabilities */
	const chatGrant = new AccessToken.ChatGrant({
		serviceSid: process.env.TWILIO_CHAT_SERVICE_SID,
		endpointId: endpoint
	})

	/* grant the token Twilio Client capabilities */
	const voiceGrant = new AccessToken.VoiceGrant({
		incomingAllow: true,
		outgoingApplicationSid: configuration.twilio.applicationSid
	})

	/* grant the access token Twilio Video capabilities */
	const videoGrant = new AccessToken.VideoGrant()

	accessToken.addGrant(voiceGrant)
	accessToken.addGrant(chatGrant)
	accessToken.addGrant(videoGrant)

	return {
		worker: workerCapability.toJwt(),
		access: accessToken.toJwt()
	}
}

module.exports.logout = function (req, res) {
	req.session.destroy(function (error) {
		if (error) {
			res.status(500).send(res.convertErrorToJSON(error))
		} else {
			res.status(200).end()
		}
	})
}

module.exports.getSession = function (req, res) {
	if (!req.session.worker) {
		res.status(403).end()
	} else {
		res.status(200).json({
			tokens: req.session.tokens,
			worker: req.session.worker,
			configuration: {
				twilio: req.configuration.twilio
			}
		})
	}
}