rainbow-cli
Version:
Rainbow CLI application based on the Rainbow SDK for Node.js
1,480 lines (1,286 loc) • 95.1 kB
JavaScript
"use strict";
const fs = require("fs");
const NodeSDK = require("../common/SDK");
const Message = require("../common/Message");
const Exit = require("../common/Exit");
const moment = require("moment");
const timezone = require("moment-timezone");
const Helper = require("../common/Helper");
// const sleep = require('system-sleep');
process.on('SIGTERM', () => {
// console.info('SIGTERM signal received.');
});
process.on('SIGINT', () => {
// console.info('SIGINT signal received.');
});
var isStop = false;
/*
async function exitHandler(evtOrExitCodeOrError) {
try {
console.info('exit signal received exitHandler. Stop to graceful Stop the SDK. 1 ');
// await async code here
await NodeSDK.stop().then(() => {
console.info('exit signal received. Stop to graceful Stop the SDK. 1 ');
});
// Optionally: Handle evtOrExitCodeOrError here
} catch (e) {
console.error('EXIT HANDLER ERROR', e);
}
process.exit(isNaN(+evtOrExitCodeOrError) ? 1 : +evtOrExitCodeOrError);
}
[
'beforeExit', 'uncaughtException', 'unhandledRejection',
'SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP',
'SIGABRT','SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV',
'SIGUSR2', 'SIGTERM',
].forEach(evt => process.on(evt, exitHandler));
// */
/*
const eventLoopQueue = () => {
return new Promise(resolve =>
setImmediate(() => {
console.log('event loop');
resolve();
})
);
}
const run = async () => {
console.info('exit signal received in run. Start to graceful Stop the SDK.');
NodeSDK.stop().then(() => {
console.info('exit signal received. Stop to graceful Stop the SDK. 1 ');
//SOME_EXIT_CONDITION = true;
isStop = true;
//resolve("OK");
});
while (!isStop) {
console.log('loop');
await eventLoopQueue();
}
}
//process.on('exit', async () => {
process.on('exit', run);
process.on('beforeexit', async () => {
//var prom = new Promise (async(resolve, reject)=> {
console.info('exit signal received. Start to graceful Stop the SDK.');
NodeSDK.stop().then(() => {
console.info('exit signal received. Stop to graceful Stop the SDK. 1 ');
//SOME_EXIT_CONDITION = true;
isStop = true;
//resolve("OK");
});
console.info('exit signal received. Stop to graceful Stop the SDK. 2!');
// });
//isStop;
while (!isStop) {
console.log('loop');
await eventLoopQueue();
}
console.info('exit signal received. Stop to graceful Stop the SDK. 3');
});
// */
class CApplication {
constructor(prefs) {
this._prefs = prefs;
}
_formatCSVMetrics(json, groups, categories, options) {
let csvJSON = {
data: []
};
let metrics = json.data;
let period = json.aggregationPeriod || "hour";
metrics.forEach(metric => {
let metricsGroups = metric.groupCounters || [];
let startDate = metric.aggregationStartDate;
switch (period) {
case "hour":
startDate = moment(startDate).format("lll");
break;
case "day":
startDate = moment(startDate).format("ll");
break;
case "month":
startDate = moment(startDate).format("MMM YYYY");
break;
default:
startDate = moment(startDate).format("lll");
break;
}
let line = {
date: startDate
};
// Prepare CSV
if (options.group) {
for (var category in categories) {
line[category] = 0;
}
} else {
groups.forEach(group => {
line[group] = 0;
});
}
metricsGroups.forEach(group => {
if (options.group) {
for (category in categories) {
if (categories[category].includes(group.group)) {
line[category] += group.count;
}
}
} else {
line[group.group] = group.count;
}
});
csvJSON["data"].push(line);
});
return csvJSON;
}
_getGroupMetrics(token) {
return new Promise(function (resolve, reject) {
NodeSDK.get("/api/rainbow/metrics/v1.0/cpaasmetrics/apiGroupsMapping", token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_getMetrics(token, options) {
return new Promise(function (resolve, reject) {
let day = options.day,
month = options.month,
year = options.year,
since = options.since,
until = options.until;
let param = "?";
let period = "hour";
let fromDate = moment().startOf("day");
let toDate = moment().endOf("day");
if (day) {
fromDate = moment(day, "YYYYMMDD").startOf("day");
toDate = moment(day, "YYYYMMDD").endOf("day");
} else if (month) {
fromDate = moment(month, "YYYYMM").startOf("month");
toDate = moment(month, "YYYYMM").endOf("month");
period = "day";
} else if (year) {
fromDate = moment(year, "YYYY").startOf("year");
toDate = moment(year, "YYYY").endOf("year");
period = "month";
} else if (since) {
fromDate = moment(since, "YYYYMM").startOf("month");
toDate = moment().endOf("month");
period = "month";
Message.log('since: fromDate: ' + fromDate + ' , toDate: ' + toDate);
} else {
fromDate = moment().startOf("month");
toDate = moment().endOf("month");
period = "day";
}
if (until) {
if (!since) {
}
toDate = moment(until, "YYYYMM").endOf("month");
period = "month";
Message.log('until: fromDate: ' + fromDate + ' , toDate: ' + toDate);
}
if (options.forcePeriod) {
period = options.forcePeriod;
}
param += "fromDate=" + fromDate.toISOString();
param += "&toDate=" + toDate.toISOString();
let zone_name = moment.tz.guess();
param += "&timezone=" + zone_name;
param += "&period=" + period;
if (options.dczones) {
param += "&dcZones=" + options.dczones;
}
// Message.log('param: ' + param);
NodeSDK.get("/api/rainbow/metrics/v1.0/cpaasmetrics/" + options.appid + param, token)
.then(function (json) {
json.start = fromDate.toDate();
json.end = toDate.toDate();
json.appid = options.appid;
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_createThreshold(token, group, notification, threshold, options) {
return new Promise(function (resolve, reject) {
let thresholdPayload = {
type: "custom",
notification: notification,
threshold: threshold
};
NodeSDK.post("/api/rainbow/applications/v1.0/applications/" + options.appid + "/thresholds/" + group, token, thresholdPayload)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_updateThreshold(token, type, group, notification, threshold, options) {
return new Promise(function (resolve, reject) {
let thresholdPayload = {
type: "custom",
notification: notification,
threshold: threshold
};
NodeSDK.put("/api/rainbow/applications/v1.0/applications/" + options.appid + "/thresholds/" + group + "/" + type, token, thresholdPayload)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_deleteThreshold(token, group, options) {
return new Promise(function (resolve, reject) {
NodeSDK.delete("/api/rainbow/applications/v1.0/applications/" + options.appid + "/thresholds/" + group + "/custom", token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_getThresholds(token, options) {
let groupName = "";
if (options.group) {
groupName = "/" + options.group;
}
return new Promise(function (resolve, reject) {
NodeSDK.get("/api/rainbow/applications/v1.0/applications/" + options.appid + "/thresholds" + groupName, token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_getApns(token, options) {
return new Promise(function (resolve, reject) {
NodeSDK.get("/api/rainbow/applications/v1.0/applications/" + options.appid + "/push-settings", token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_getApplicationAnalytics(token, options) {
return new Promise(function (resolve, reject) {
let since = options.since,
until = options.until,
appid = options.appid;
let param = "?";
param += "fromMonth=" + moment(since, 'YYYYMM').format('YYYY-MM');
param += "&toMonth=" + moment(until, 'YYYYMM').format('YYYY-MM');
if (options.companyid) {
param += "&companyId=" + options.companyid;
}
if (options.details) {
param += "&format=" + options.details;
}
if (options.page > 0) {
param += "&offset=";
if (options.page > 1) {
param += options.limit * (options.page - 1);
} else {
param += 0;
}
}
param += "&limit=" + Math.min(options.limit, 1000);
NodeSDK.get("/api/rainbow/analytics/v1.0/applications/" + appid + "/users" + param, token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_getApplicationCounters(token, options) {
return new Promise(function (resolve, reject) {
let appid = options.appid;
NodeSDK.get("/api/rainbow/applications/v1.0/applications/counters/" + appid, token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_setApplicationCounter(token, options) {
return new Promise(function (resolve, reject) {
let counter = {
appId: options.appid,
[options.countername]: options.countervalue
};
NodeSDK.post("/api/rainbow/applications/v1.0/applications/counters", token, counter)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_getApplication(token, options) {
let that = this;
return new Promise(function (resolve, reject) {
NodeSDK.get("/api/rainbow/applications/v1.0/applications/" + options.appid, token)
.then(function (json) {
let url = "/api/rainbow/enduser/v1.0/users/";
if (that._prefs.user.roles.includes("support") || that._prefs.user.roles.includes("superadmin")) {
url = "/api/rainbow/admin/v1.0/users/";
}
if (json.data.ownerId) {
NodeSDK.get(url + json.data.ownerId, token)
.then(function (userJson) {
json.data.owner = userJson.data;
resolve(json);
})
.catch(err => {
json.data.owner = null;
resolve(json);
});
} else {
resolve(json);
}
})
.catch(function (err) {
reject(err);
});
});
}
_getPush(token, options) {
return new Promise(function (resolve, reject) {
NodeSDK.get(
"/api/rainbow/applications/v1.0/applications/" + options.appid + "/push-settings/" + options.id,
token
)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_getApps(token, filterToApply, offset, limit) {
filterToApply += "&limit=" + limit + "&offset=" + offset;
return NodeSDK.get("/api/rainbow/applications/v1.0/applications?" + filterToApply, token);
}
async _getExpiredPushCert(token, options) {
var filterToApply = "format=full&state=active&env=deployed";
var limit = 100;
var offset = 0;
var finished = false;
var expiredCertificates = [];
while (!finished) {
try {
let json = await this._getApps(token, filterToApply, offset, limit);
var apps = json.data;
if (apps.length > 0) {
var today = new Date();
apps.forEach(app => {
var pushNotifs = app.pushNotificationSettings;
if (pushNotifs) {
pushNotifs.forEach(pushNotif => {
let expDate = new Date(pushNotif.certificateExpirationTime);
if (expDate instanceof Date) {
if (expDate < today) {
expiredCertificates.push({ appName: app.name, certType: pushNotif.type + '/' + pushNotif.certificateType, certExpDate: expDate });
}
}
});
}
});
offset += limit;
}
else {
finished = true;
}
}
catch (error) {
console.log(error);
}
}
return expiredCertificates;
}
_getApplications(token, options) {
let that = this;
return new Promise(function (resolve, reject) {
var filterToApply = "format=full";
if (options.format) {
filterToApply = "format=" + options.format;
}
if (options.filter) {
filterToApply += `&env=${options.filter}`;
}
if (options.state) {
if (options.state === "notactive") {
filterToApply += `&state=blocked,stopped,new`;
} else {
filterToApply += `&state=${options.state}`;
}
}
if (options.byDate) {
switch (options.filter) {
case "blocked":
case "deployed":
filterToApply += "&sortField=dateOfDeployment&sortOrder=-1";
break;
case "in_deployment":
filterToApply += "&sortField=dateOfDeploymentRequest&sortOrder=-1";
break;
default:
filterToApply += "&sortField=dateOfCreation&sortOrder=-1";
break;
}
}
if (options.owner) {
filterToApply += "&ownerId=" + options.owner;
}
if (options.subscription) {
filterToApply += "&subscriptionStatus=creating,active,alerting";
}
if (options.name) {
filterToApply += "&name=" + options.name;
}
if (options.type) {
filterToApply += "&types=" + options.type;
}
if (options.kpi) {
filterToApply += "&kpi=" + options.kpi;
}
if (options.page > 0) {
filterToApply += "&offset=";
if (options.page > 1) {
filterToApply += options.limit * (options.page - 1);
} else {
filterToApply += 0;
}
}
filterToApply += "&limit=" + Math.min(options.limit, 1000);
NodeSDK.get("/api/rainbow/applications/v1.0/applications?" + filterToApply, token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_createApplication(token, options) {
return new Promise(function (resolve, reject) {
let application = {
name: options.name,
origin: "",
type: options.type,
activity: "J"
};
if (options.owner) {
application.ownerId = options.owner;
}
NodeSDK.post("/api/rainbow/applications/v1.0/applications", token, application)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_updateApplication(token, options, data) {
return new Promise(function (resolve, reject) {
NodeSDK.put("/api/rainbow/applications/v1.0/applications/" + options.appid, token, data)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_createFCMV1(token, options) {
return new Promise(function (resolve, reject) {
try {
const firebasejson = fs.readFileSync(options.firebasejson);
const firebaseparsed = JSON.parse(firebasejson);
if (!firebaseparsed.project_id || !firebaseparsed.private_key_id || !firebaseparsed.private_key
|| !firebaseparsed.client_email || !firebaseparsed.token_uri) {
console.error("Incorrect firebase json file content (missing at least one of project_id, private_key_id, private_key, client_email, token_uri)");
reject("Incorrect firebase json file content");
}
let fcmv1 = {
type: "fcm_v1",
project_id: firebaseparsed.project_id,
private_key_id: firebaseparsed.private_key_id,
private_key: firebaseparsed.private_key,
client_email: firebaseparsed.client_email,
token_uri: firebaseparsed.token_uri,
isEnabled: true
};
NodeSDK.post("/api/rainbow/applications/v1.0/applications/" + options.appid + "/push-settings", token, fcmv1)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
}
catch(error) {
reject(error);
}
});
}
_createAPNSV2(token, options) {
return new Promise(function (resolve, reject) {
fs.readFile(options.file, "utf8", (err, data) => {
let apnsv2 = {
type: "apns_v2",
certificateFile: data,
appBundleId: options.appBundleId,
isEnabled: true
};
if (err) {
console.log("ERR", err);
reject(err);
}
else {
NodeSDK.post("/api/rainbow/applications/v1.0/applications/" + options.appid + "/push-settings",
token, apnsv2)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
}
});
});
}
_delete(token, options) {
return new Promise(function (resolve, reject) {
NodeSDK.delete("/api/rainbow/applications/v1.0/applications/" + options.appid, token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_block(token, options) {
return new Promise(function (resolve, reject) {
NodeSDK.put("/api/rainbow/applications/v1.0/applications/" + options.appid + "/block", token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_unblock(token, options) {
return new Promise(function (resolve, reject) {
NodeSDK.put("/api/rainbow/applications/v1.0/applications/" + options.appid + "/unblock", token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_deploy(token, options) {
let getApplication = function (id, token) {
return new Promise(function (resolve, reject) {
NodeSDK.get("/api/rainbow/applications/v1.0/applications/" + id, token)
.then(function (json) {
resolve(json.data);
})
.catch(function (err) {
reject(err);
});
});
};
let wait = function () {
return new Promise(function (resolve) {
setTimeout(function () {
resolve();
}, 2000);
});
};
let waitForApplication = function (id, token) {
return new Promise(function (resolve, reject) {
NodeSDK.get("/api/rainbow/applications/v1.0/applications/" + id, token)
.then(function (json) {
let app = json.data;
if (app.kpi === "business" || app.kpi === "internal" || app.kpi === "demo" || app.kpi === "appconnect") {
resolve(json.data);
return;
}
if (app.subscriptions && app.subscriptions.length > 0 && !app.subscriptions[0].syncOngoing) {
resolve(json.data);
return;
}
wait().then(function () {
return waitForApplication(id, token).then(function (application) {
resolve(application);
});
});
})
.catch(function (err) {
reject(err);
});
});
};
let addSubscription = function (application, token) {
return new Promise(function (resolve, reject) {
// Si pay as you go and no subscriptions
if (
application.kpi === "business" || application.kpi === "internal" || application.kpi === "demo" || application.kpi === "appconnect" ||
(application.kpi === "payasyougo" && application.subscriptions && application.subscriptions.length > 0)
) {
resolve(application);
return;
}
NodeSDK.post(
"/api/rainbow/subscription/v1.0/developers/" + application.ownerId + "/subscriptions",
token,
{ applicationId: application.id }
)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
if (err.code === 403) {
err.details =
"Can't deploy application. Error with payment method. Check if payment method exists.";
}
reject(err);
});
});
};
let requestDeploy = function (application) {
return new Promise(function (resolve, reject) {
if (application.kpi !== "business" && application.kpi !== "internal" && application.kpi !== "demo" && application.kpi !== "appconnect") {
resolve(application);
return;
}
NodeSDK.put("/api/rainbow/applications/v1.0/applications/" + application.id + "/request-deploy", token)
.then(function (json) {
resolve(json.data);
})
.catch(function (err) {
reject(err);
});
});
};
return new Promise(function (resolve, reject) {
let application = null;
getApplication(options.appid, token)
.then(function (json) {
application = json;
if (application.env === "deployed") {
reject({
details: "Can't deploy application. Application is already deployed."
});
return;
}
return addSubscription(application, token);
})
.then(function () {
return waitForApplication(options.appid, token);
})
.then(function () {
return requestDeploy(application);
})
.then(function (application) {
resolve(application);
})
.catch(function (err) {
reject(err);
});
});
}
_approve(token, options) {
return new Promise(function (resolve, reject) {
let data = {
deployReason: options.reason || ""
};
NodeSDK.put("/api/rainbow/applications/v1.0/applications/" + options.appid + "/deploy", token, data)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_stop(token, options) {
return new Promise(function (resolve, reject) {
NodeSDK.put("/api/rainbow/applications/v1.0/applications/" + options.appid + "/stop", token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_restart(token, options) {
return new Promise(function (resolve, reject) {
NodeSDK.put("/api/rainbow/applications/v1.0/applications/" + options.appid + "/restart", token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_dismiss(token, options) {
return new Promise(function (resolve, reject) {
NodeSDK.put("/api/rainbow/applications/v1.0/applications/" + options.appid + "/decline", token)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_usage(token, options) {
let param = {
year: options.year,
month: options.month
};
return new Promise(function (resolve, reject) {
NodeSDK.post(
"/api/rainbow/invoicing/v1.0/cpaas/zuora/" +
options.appid +
"?year=" +
options.year +
"&month=" +
options.month,
token
)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
_deletePush(token, options) {
return new Promise(function (resolve, reject) {
NodeSDK.delete(
"/api/rainbow/applications/v1.0/applications/" + options.appid + "/push-settings/" + options.id,
token
)
.then(function (json) {
resolve(json);
})
.catch(function (err) {
reject(err);
});
});
}
getApplication(options) {
var that = this;
try {
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Get information for application", options.appid, options);
let spin = Message.spin(options);
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return that._getApplication(that._prefs.token, options);
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json.data);
} else {
Message.lineFeed();
Message.table2D(json.data);
Message.lineFeed();
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLoggedIn(options);
Exit.error();
}
} catch (err) {
Message.error(err, options);
Exit.error();
}
}
createApplication(options) {
var that = this;
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Create new application", options.name, options);
let spin = Message.spin(options);
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return that._createApplication(that._prefs.token, options);
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json.data);
} else {
Message.lineFeed();
Message.printSuccess("Application created with Id", json.data.id, options);
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLoggedIn(options);
Exit.error();
}
}
linkApplication(options) {
var that = this;
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Link application to user", options.ownerid, options);
let spin = Message.spin(options);
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return that._updateApplication(that._prefs.token, options, {
ownerId: options.ownerid
});
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json.data);
} else {
Message.lineFeed();
Message.printSuccess("Application successfully linked to user", options.ownerid, options);
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLoggedIn(options);
Exit.error();
}
}
renewApplication(options) {
var that = this;
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Renew application secret for application", options.appid, options);
let spin = Message.spin(options);
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return that._updateApplication(that._prefs.token, options, {
refreshAppSecret: true
});
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json.data);
} else {
Message.lineFeed();
Message.printSuccess(
"Application secret successfully renewed for application",
options.appid,
options
);
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLoggedIn(options);
Exit.error();
}
}
deleteApplication(options) {
var that = this;
var doDelete = function (options) {
let spin = Message.spin(options);
NodeSDK.start(that._prefs.email, that._prefs.password, that._prefs.host)
.then(function () {
Message.log("execute action...");
return that._delete(that._prefs.token, options);
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json);
} else {
Message.lineFeed();
Message.success(options);
Message.log("finished! will exit!");
Exit.ok();
}
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
};
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Delete application", options.appid, options);
if (options.noconfirmation) {
doDelete(options);
} else {
Message.confirm("Are-you sure ? It will remove it completely").then(function (confirm) {
if (confirm) {
doDelete(options);
} else {
Message.canceled(options);
Exit.error();
}
});
}
} else {
Message.notLoggedIn(options);
Exit.error();
}
}
blockApplication(options) {
var that = this;
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Block an application", options.appid, options);
let spin = Message.spin(options);
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return that._block(that._prefs.token, options);
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json.data);
} else {
Message.lineFeed();
Message.printSuccess("Application blocked", json.data.id, options);
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLoggedIn(options);
Exit.error();
}
}
unblockApplication(options) {
var that = this;
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Unblock an application", options.appid, options);
let spin = Message.spin(options);
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return that._unblock(that._prefs.token, options);
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json.data);
} else {
Message.lineFeed();
Message.printSuccess("Application unblocked", json.data.id, options);
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLoggedIn(options);
Exit.error();
}
}
deployApplication(options) {
var that = this;
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Request to deploy application", options.appid, options);
let spin = Message.spin(options);
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return that._deploy(that._prefs.token, options);
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json);
} else {
Message.lineFeed();
Message.printSuccess("Application deployment request done", json.id, options);
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLoggedIn(options);
Exit.error();
}
}
approveApplication(options) {
var that = this;
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Deploy an application", options.appid, options);
let spin = null;
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return Message.ask("Deployment reason", "");
})
.then(function (reason) {
options.reason = reason;
spin = Message.spin(options);
return that._approve(that._prefs.token, options);
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json.data);
} else {
Message.lineFeed();
Message.printSuccess("Application deployed", json.data.id, options);
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLoggedIn(options);
Exit.error();
}
}
dismissApplication(options) {
var that = this;
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Decline a request of deployment of application", options.appid, options);
let spin = Message.spin(options);
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return that._dismiss(that._prefs.token, options);
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json.data);
} else {
Message.lineFeed();
Message.printSuccess("Application deployment declined", json.data.id, options);
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLoggedIn(options);
Exit.error();
}
}
stopApplication(options) {
var that = this;
Message.welcome(options);
if (this._prefs.token && this._prefs.user) {
Message.loggedin(this._prefs, options);
Message.action("Stop an application", options.appid, options);
let spin = Message.spin(options);
NodeSDK.start(
this._prefs.email,
this._prefs.password,
this._prefs.host,
this._prefs.proxy,
this._prefs.appid,
this._prefs.appsecret
)
.then(function () {
Message.log("execute action...");
return that._stop(that._prefs.token, options);
})
.then(function (json) {
Message.unspin(spin);
Message.log("action done...", json);
if (options.noOutput) {
Message.out(json.data);
} else {
Message.lineFeed();
Message.printSuccess("Application stopped", json.data.id, options);
Message.success(options);
}
Message.log("finished! will exit!");
Exit.ok();
})
.catch(function (err) {
Message.unspin(spin);
Message.error(err, options);
Exit.error();
});
} else {
Message.notLogge