apiconnect-cli-login-bluemix
Version:
Plugin for IBM API Connect Developer Toolkit.
140 lines (117 loc) • 3.21 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-login-bluemix
var rp = require('request-promise');
var fs = require('fs');
var path = require('path');
var Promise = require('bluebird');
var createError = require('http-errors');
var bluemixSecurity = module.exports;
var REFRESH_ROUTE = '/refresh';
var TOKEN_ROUTE = '/token';
var CERT_ROUTE = '/cert';
var PASSCODE_ROUTE = '/passcode-url';
var PASSWORD_ROUTE = '/password-token';
var APIKEY_ROUTE = '/apikey';
bluemixSecurity.apiKeyForToken = function(apikey, url) {
var options = {
method: 'POST',
url: APIKEY_ROUTE,
baseUrl: url,
json: true,
qs: { apikey: apikey },
};
return rp(options).then(function(body) {
return body.jwt;
}).catch(createBluemixSecurityError);
};
bluemixSecurity.passcodeForToken = function(passcode, url) {
var options = {
method: 'POST',
url: TOKEN_ROUTE,
baseUrl: url,
json: true,
qs: { passcode: passcode },
};
return rp(options).then(function(body) {
return body.jwt;
}).catch(createBluemixSecurityError);
};
bluemixSecurity.codeForToken = function(code, url) {
var options = {
method: 'GET',
url: TOKEN_ROUTE,
baseUrl: url,
json: true,
qs: { code: code },
};
return rp(options).then(function(body) {
return body.jwt;
}).catch(createBluemixSecurityError);
};
bluemixSecurity.refresh = function(token, url) {
var options = {
method: 'POST',
url: REFRESH_ROUTE,
baseUrl: url,
json: { jwt: token },
};
return rp(options).then(function(body) {
return body.jwt;
}).catch(createBluemixSecurityError);
};
bluemixSecurity.getPasscodeURL = function(url) {
var options = {
method: 'GET',
url: PASSCODE_ROUTE,
baseUrl: url,
json: true,
};
return rp(options).then(function(body) {
return body.passcodeURL;
}).catch(createBluemixSecurityError);
};
bluemixSecurity.passwordToken = function(username, password, url) {
var options = {
method: 'POST',
url: PASSWORD_ROUTE,
baseUrl: url,
json: true,
body: {
username: username,
password: password,
},
};
return rp(options).then(function(body) {
return body.jwt;
}).catch(createBluemixSecurityError);
};
bluemixSecurity.getCert = function(url) {
var options = {
method: 'GET',
url: CERT_ROUTE,
baseUrl: url,
json: true,
};
return rp(options).catch(function() {
return {
alg: 'ES384',
cert: fs.readFileSync(path.resolve(__dirname, '../', 'APIConnectDevCert.pem')),
};
});
};
function createBluemixSecurityError(res) {
var error_message = res.message;
if (res.error.error_message) {
error_message = res.error.error_message;
}
return Promise.reject(createError(res.statusCode, error_message));
}