mirror of
https://github.com/jambonz/jambonz-feature-server.git
synced 2026-01-25 02:07:56 +00:00
* add statusHook to redirect * fix url import * Update redirect.js * logging * constructor statusHook * lint n logging * debug * update call_status_hook * use notifier to test url * remove require url as its global since node 10 * update verb specs dep * update verb specs
79 lines
2.9 KiB
JavaScript
79 lines
2.9 KiB
JavaScript
const Task = require('./task');
|
|
const {TaskName} = require('../utils/constants');
|
|
const WsRequestor = require('../utils/ws-requestor');
|
|
const HttpRequestor = require('../utils/http-requestor');
|
|
|
|
/**
|
|
* Redirects to a new application
|
|
*/
|
|
class TaskRedirect extends Task {
|
|
constructor(logger, opts) {
|
|
super(logger, opts);
|
|
this.statusHook = opts.statusHook || false;
|
|
}
|
|
|
|
get name() { return TaskName.Redirect; }
|
|
|
|
async exec(cs) {
|
|
await super.exec(cs);
|
|
|
|
const isAbsoluteUrl = cs.application?.requestor?._isAbsoluteUrl(this.actionHook);
|
|
|
|
if (isAbsoluteUrl) {
|
|
this.logger.info(`TaskRedirect redirecting to new absolute URL ${this.actionHook}, requires new requestor`);
|
|
|
|
if (cs.requestor instanceof WsRequestor) {
|
|
try {
|
|
const requestor = new WsRequestor(this.logger, cs.accountSid, {url: this.actionHook},
|
|
cs.accountInfo.account.webhook_secret) ;
|
|
cs.requestor.emit('handover', requestor);
|
|
} catch (err) {
|
|
this.logger.info(err, `TaskRedirect error redirecting to ${this.actionHook}`);
|
|
}
|
|
}
|
|
else {
|
|
const baseUrl = this.cs.application.requestor.baseUrl;
|
|
const newUrl = new URL(this.actionHook);
|
|
const newBaseUrl = newUrl.protocol + '//' + newUrl.host;
|
|
if (baseUrl != newBaseUrl) {
|
|
try {
|
|
this.logger.info(`Task:redirect updating base url to ${newBaseUrl}`);
|
|
const newRequestor = new HttpRequestor(this.logger, cs.accountSid, {url: this.actionHook},
|
|
cs.accountInfo.account.webhook_secret);
|
|
cs.requestor.emit('handover', newRequestor);
|
|
} catch (err) {
|
|
this.logger.info(err, `TaskRedirect error updating base url to ${this.actionHook}`);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* update the notifier if a new statusHook was provided */
|
|
if (this.statusHook) {
|
|
this.logger.info(`TaskRedirect updating statusHook to ${this.statusHook}`);
|
|
try {
|
|
const oldNotifier = cs.application.notifier;
|
|
const isStatusHookAbsolute = cs.notifier?._isAbsoluteUrl(this.statusHook);
|
|
if (isStatusHookAbsolute) {
|
|
if (cs.notifier instanceof WsRequestor) {
|
|
cs.application.notifier = new WsRequestor(this.logger, cs.accountSid, {url: this.statusHook},
|
|
cs.accountInfo.account.webhook_secret);
|
|
} else {
|
|
cs.application.notifier = new HttpRequestor(this.logger, cs.accountSid, {url: this.statusHook},
|
|
cs.accountInfo.account.webhook_secret);
|
|
}
|
|
if (oldNotifier?.close) oldNotifier.close();
|
|
}
|
|
/* update the call_status_hook URL that gets passed to the notifier */
|
|
cs.application.call_status_hook = this.statusHook;
|
|
} catch (err) {
|
|
this.logger.info(err, `TaskRedirect error updating statusHook to ${this.statusHook}`);
|
|
}
|
|
}
|
|
|
|
await this.performAction();
|
|
}
|
|
}
|
|
|
|
module.exports = TaskRedirect;
|