apiconnect-cli-publish-bluemix
Version:
Plugin for IBM API Connect Developer Toolkit
141 lines (116 loc) • 3.97 kB
JavaScript
/********************************************************* {COPYRIGHT-TOP} ***
* Licensed Materials - Property of IBM
* 5725-Z22, 5725-Z63, 5725-U33, 5725-Z63
*
* (C) Copyright IBM Corporation 2016, 2017
*
* All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or disclosure
* restricted by GSA ADP Schedule Contract with IBM Corp.
********************************************************** {COPYRIGHT-END} **/
// Node module: apiconnect-cli-publish-bluemix
var rp = require('request-promise');
var BluemixLogin = require('apiconnect-cli-login-bluemix');
var bluemixRuntime = require('./bluemix-runtime');
var g = require('strong-globalize')();
module.exports.bluemixAPI = function(hostname, options) {
options = options || {};
if (!hostname) {
throw new Error(g.f('Hostname is required.'));
}
var bluemixLogin = new BluemixLogin(hostname);
return bluemixLogin.status().then(function(tokenStatus) {
if (!tokenStatus.loggedIn && !tokenStatus.expiration) {
throw new Error(g.f('Login is required.'));
}
var deployerServerUrl = (options.deployerServerUrl ?
options.deployerServerUrl :
bluemixRuntime.getBaseUrl(hostname)
);
var fullToken = {};
return bluemixLogin.token()
.then(function(fullJWT) {
fullToken = fullJWT;
}).then(getBluemixApiUrl.bind(null, deployerServerUrl))
.then(function(url) {
return bluemixLogin.decryptedToken().then(function(decryptedToken) {
return new BluemixAPI(hostname, url, decryptedToken.tokens.token, fullToken);
});
});
});
};
var getBluemixApiUrl = function(deployerServerUrl, token) {
return bluemixRuntime.getBluemixAPIHost(deployerServerUrl, token);
};
function BluemixAPI(hostname, url, token, fullToken) {
this.host = hostname;
this.baseURL = url;
this.organizationsURL = [ this.baseURL, 'v2', 'organizations' ].join('/');
this.spacesURL = [ this.baseURL, 'v2', 'spaces' ].join('/');
this.appURL = [ this.baseURL, 'v2', 'apps' ].join('/');
this.fullToken = [ 'bearer', fullToken ].join(' ');
this.authorization = [ 'bearer', token ].join(' ');
this.defaultOptions = {
url: this.baseURL,
headers: {
authorization: this.authorization,
},
json: true,
method: 'GET',
};
}
BluemixAPI.prototype.listAllOrganizations = function() {
var options = this.defaultOptions;
options.url = this.organizationsURL;
return rp(options).then(function(body) {
return body.resources;
});
};
BluemixAPI.prototype.listAllSpacesForOrganization = function(org_guid) {
var options = this.defaultOptions;
options.url = [ this.organizationsURL, org_guid, 'spaces' ].join('/');
return rp(options).then(function(body) {
return body.resources;
});
};
BluemixAPI.prototype.listAllSpaces = function() {
var options = this.defaultOptions;
options.url = this.spacesURL;
return rp(options).then(function(body) {
return body.resources;
});
};
BluemixAPI.prototype.listAllAppsForSpace = function(space_guid) {
var options = this.defaultOptions;
options.url = [ this.spacesURL, space_guid, 'apps' ].join('/');
return rp(options).then(function(body) {
return body.resources;
});
};
BluemixAPI.prototype.listAllRoutesForApp = function(app_guid) {
var options = this.defaultOptions;
options.url = this.appURL + '/' + app_guid + '/routes';
return rp(options).then(function(body) {
return body.resources;
});
};
BluemixAPI.prototype.provisionLookup = function(org_guid, space_guid) {
var temp = bluemixRuntime.getBaseUrl(this.host);
var provisionUrl = temp.replace('deployer', 'provision');
var options = {
url: provisionUrl + '/v1/provision-service',
qs: {
guid: true,
},
headers: {
'Content-Type': 'application/json',
Authorization: this.fullToken,
},
json: {
org: org_guid,
space: space_guid,
},
method: 'PUT',
};
return rp(options);
};