fh-fhc
Version:
A Command Line Interface for FeedHenry
90 lines (81 loc) • 2.96 kB
JavaScript
/* globals i18n */
var common = require('../../../common.js');
var log = require("../../../utils/log");
var util = require('util');
var fhc = require("../../../fhc");
var request = require('request');
var url = require('url');
var os = require('os');
var fhreq = require("../../../utils/request");
module.exports = function(requestType) {
return {
'demand' : ['app', 'data', 'env'],
'alias' : {
'app' : 'a',
'env' : 'e',
0 : 'app'
},
'describe' : {
'app' : i18n._('Unique 24 character GUID of the app you want to do a request on'),
'env' : i18n._('Environment within which the request should be performed'),
'data' : i18n._('Request body to send thru')
},
'preCmd' : function(params, cb) {
var self = this,
funct = params.fn;
fhc.app.read({ app:params.app}, function(err, res) {
if (err) {
return cb(err);
}
var inst = res.inst;
self.key = inst.apiKey;
// Now lookup the hostname for this environment
getAppNameUrl(params.app, params.env, function(err, appName, appUrl) {
if (err || !appName || !appUrl) {
return cb(util.format(i18n._('App %s not found for environment %s'), params.app, params.env) + ' - ' + err.toString());
}
if (!appUrl.match(/\/$/)) {
appUrl = appUrl + '/';
}
log.silly(appName, "Act call appName");
log.verbose(appUrl + "cloud/" + funct, "Act call appUrl");
if (requestType === 'act') {
self.url = url.resolve(appUrl, "cloud/" + params.fn);
} else {
self.url = url.resolve(appUrl, params.path);
}
return cb(null, params);
});
});
},
'customCmd' : function(params, cb) {
var headers = {
"X-FH-AUTH-APP": this.key,
"User-Agent": "FHC/" + fhc._version + ' ' + os.platform() + '/' + os.release()
},
data = params.data;
// post to /cloud
request({uri: this.url, headers: headers, method: 'POST', proxy: fhc.config.get("proxy"), body: data, json : true}, function(err, response, body) {
if (err) {
return cb(err);
}
log.verbose(response.statusCode, "Act call response statusCode");
log.silly(body, "Act call response body");
if (response.statusCode !== 200) {
return cb(i18n._("Bad response: ") + util.inspect(body) + i18n._(" code: ") + response.statusCode);
}
return cb(undefined, body);
});
}
};
};
// gets our app name via 'hosts' api
function getAppNameUrl(appId, env, cb) {
common.doApiCall(fhreq.getFeedHenryUrl(), "box/srv/1.1/ide/" + fhc.curTarget + "/app/hosts", {payload: {guid: appId}}, "", function(err, data) {
if (err) {
return cb(err);
}
log.silly(data, "hosts");
return cb(undefined, data.hosts[env + '-name'], data.hosts[env + '-url']);
});
}