UNPKG

apiconnect-cli-publish-bluemix

Version:

Plugin for IBM API Connect Developer Toolkit

141 lines (116 loc) 3.97 kB
/********************************************************* {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); };