k2hr3-api
Version:
K2HR3 REST API is K2hdkc based Resource and Roles and policy Rules
405 lines (362 loc) • 10.3 kB
JavaScript
/*
* K2HR3 REST API
*
* Copyright 2017 Yahoo Japan Corporation.
*
* K2HR3 is K2hdkc based Resource and Roles and policy Rules, gathers
* common management information for the cloud.
* K2HR3 can dynamically manage information as "who", "what", "operate".
* These are stored as roles, resources, policies in K2hdkc, and the
* client system can dynamically read and modify these information.
*
* For the full copyright and license information, please view
* the license file that was distributed with this source code.
*
* AUTHOR: Takeshi Nakatani
* CREATE: Wed Jun 8 2017
* REVISION:
*
*/
;
var http = require('http');
var https = require('https');
var cacerts = require('../lib/cacerts');
var apiutil = require('../lib/k2hr3apiutil');
var cliutil = require('../lib/k2hr3cliutil');
// Debug logging objects
var r3logger = require('../lib/dbglogging');
//
// Hostname and port from env
//
var hostname = apiutil.getSafeString(process.env.APIHOST);
var hostport = apiutil.getSafeString(process.env.APIPORT);
var is_https = apiutil.compareCaseString('yes', process.env.HTTPS_ENV);
//
// Request API for test
//
function deleteV1Role(token, name, target_host, port, cuk)
{
var headers = {
'Content-Type': 'application/json',
'Content-Length': 0,
};
if(apiutil.isSafeString(token)){
headers['X-Auth-Token'] = token;
}
var urlarg = '';
var already_set = false;
if(apiutil.isSafeString(target_host)){
urlarg += already_set ? '&host=' : '?host=';
urlarg += target_host;
already_set = true;
}
if(apiutil.isSafeEntity(port) && !isNaN(port)){
urlarg += already_set ? '&port=' : '?port=';
urlarg += String(port);
}
if(apiutil.isSafeString(cuk)){
urlarg += already_set ? '&cuk=' : '?cuk=';
urlarg += cuk;
already_set = true;
}
var options = {
'host': hostname,
'port': hostport,
'path': '/v1/role/' + name + encodeURI(urlarg),
'method': 'DELETE',
'headers': headers
};
r3logger.dlog('request options = ' + JSON.stringify(options));
r3logger.dlog('request headers = ' + JSON.stringify(headers));
var httpobj;
if(is_https){
if(null !== cacerts.ca){
options.ca = cacerts.ca;
}
options.rejectUnauthorized = false; // always insecure for this manual test
options.agent = new https.Agent(options);
httpobj = https;
}else{
options.agent = new http.Agent(options);
httpobj = http;
}
var req = httpobj.request(options, function(res)
{
var response = '';
console.log('RESPONSE CODE = ' + res.statusCode);
r3logger.dlog('response status = ' + res.statusCode);
r3logger.dlog('response header = ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk)
{
r3logger.dlog('response chunk = ' + chunk);
response += chunk;
});
res.on('end', function(result) // eslint-disable-line no-unused-vars
{
r3logger.mlog(r3logger.dump(response)); // response is object(or not)
console.log('RESPONSE BODY = ' + JSON.stringify(response));
process.exit(0);
});
});
req.on('error', function(e)
{
r3logger.elog('problem with request: ' + e.message);
});
req.end();
}
//
// Request API for test
//
function deleteV1_IPByCuk(addrs, port, cuk)
{
var headers = {
'Content-Type': 'application/json',
'Content-Length': 0,
};
var urlarg = '';
var already_set = false;
if(apiutil.isSafeEntity(addrs)){
urlarg += already_set ? '&host=' : '?host=';
if(apiutil.isArray(addrs)){
urlarg += JSON.stringify(addrs);
}else{
urlarg += addrs;
}
already_set = true;
}
if(apiutil.isSafeString(cuk)){
urlarg += already_set ? '&cuk=' : '?cuk=';
urlarg += cuk;
already_set = true;
}
if(null !== port && !isNaN(port)){
urlarg += already_set ? '&port=' : '?port=';
urlarg += String(port);
already_set = true;
}
var options = {
'host': hostname,
'port': hostport,
'path': '/v1/role' + encodeURI(urlarg),
'method': 'DELETE',
'headers': headers
};
r3logger.dlog('request options = ' + JSON.stringify(options));
r3logger.dlog('request headers = ' + JSON.stringify(headers));
var httpobj;
if(is_https){
if(null !== cacerts.ca){
options.ca = cacerts.ca;
}
options.rejectUnauthorized = false; // always insecure for this manual test
options.agent = new https.Agent(options);
httpobj = https;
}else{
options.agent = new http.Agent(options);
httpobj = http;
}
var req = httpobj.request(options, function(res)
{
var response = '';
console.log('RESPONSE CODE = ' + res.statusCode);
r3logger.dlog('response status = ' + res.statusCode);
r3logger.dlog('response header = ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk)
{
r3logger.dlog('response chunk = ' + chunk);
response += chunk;
});
res.on('end', function(result) // eslint-disable-line no-unused-vars
{
r3logger.mlog(r3logger.dump(response)); // response is object(or not)
console.log('RESPONSE BODY = ' + JSON.stringify(response));
process.exit(0);
});
});
req.on('error', function(e)
{
r3logger.elog('problem with request: ' + e.message);
});
req.end();
}
//
// run
//
cliutil.getConsoleInput('Delete ROLE/TOKEN(role)/HOST(name or ip)/IP/CUK : ', true, false, function(isbreak, type)
{
if(isbreak){
process.exit(0);
}
var _type = type;
if(apiutil.compareCaseString('ROLE', type)){
_type = 'role';
}else if(apiutil.compareCaseString('TOKEN', type)){
_type = 'token';
}else if(apiutil.compareCaseString('HOST', type)){
_type = 'host';
}else if(apiutil.compareCaseString('IP', type)){
_type = 'ip';
}else if(apiutil.compareCaseString('CUK', type)){
_type = 'cuk';
}else{
console.log('token type must be USER or ROLE or HOST or IP : ' + JSON.stringify(type));
process.exit(0);
}
if('cuk' === _type){
cliutil.getConsoleInput('IP addrs(null=all, one ip, multi ip with ",") : ', true, false, function(isbreak, addrs)
{
if(isbreak){
process.exit(0);
}
var _addrs = null;
if(apiutil.isSafeString(addrs)){
_addrs = new Array();
var tmpaddrarr = addrs.split(',');
for(var cnt = 0; cnt < tmpaddrarr.length; ++cnt){
if(apiutil.isSafeString(tmpaddrarr[cnt].trim())){
_addrs.push(apiutil.getSafeString(tmpaddrarr[cnt].trim()));
}
}
if(0 == _addrs.length){
_addrs = null;
}else if(1 == _addrs.length){
_addrs = _addrs[0];
}
}
cliutil.getConsoleInput('Delete by CUK(allow empty) : ', true, false, function(isbreak, cuk)
{
if(isbreak){
process.exit(0);
}
var _cuk = null;
if(apiutil.isSafeString(cuk) && apiutil.isSafeString(cuk.trim())){
_cuk = cuk.trim();
}
cliutil.getConsoleInput('Delete by port(allow empty) : ', true, false, function(isbreak, port)
{
if(isbreak){
process.exit(0);
}
var _port = null;
if(!isNaN(port)){
_port = parseInt(port);
}
// run
deleteV1_IPByCuk(_addrs, _port, _cuk);
});
});
});
}else{
cliutil.getConsoleInput('Role name or path(full yrn for IP) : ', true, false, function(isbreak, name)
{
if(isbreak){
process.exit(0);
}
var _name = name;
if('ip' === _type){
cliutil.getConsoleInput('Delete host port(default 0) : ', true, false, function(isbreak, port)
{
if(isbreak){
process.exit(0);
}
var _port = 0;
if(!apiutil.isSafeEntity(port)){
_port = 0;
}else if(!isNaN(port)){
_port = port;
}else{
console.log('port number must be decimal number or empty(empty means 0=any port) : ' + JSON.stringify(port));
process.exit(0);
}
cliutil.getConsoleInput('Delete host CUK(default empty) : ', true, false, function(isbreak, cuk)
{
if(isbreak){
process.exit(0);
}
var _cuk = null;
if(apiutil.isSafeString(cuk) && apiutil.isSafeString(cuk.trim())){
_cuk = cuk.trim();
}
// run
deleteV1Role(null, _name, null, _port, _cuk);
});
});
}else if('host' === _type){
cliutil.getConsoleInput('Scoped user token : ', true, false, function(isbreak, token)
{
if(isbreak){
process.exit(0);
}
var _token = 'U=' + token;
cliutil.getConsoleInput('Delete hostname or ip address : ', true, false, function(isbreak, hostname)
{
if(isbreak){
process.exit(0);
}
var _hostname = hostname;
if(!apiutil.isSafeString(hostname)){
process.exit(0);
}
cliutil.getConsoleInput('Delete host port(default 0) : ', true, false, function(isbreak, port)
{
if(isbreak){
process.exit(0);
}
var _port = 0;
if(!apiutil.isSafeEntity(port)){
_port = 0;
}else if(!isNaN(port)){
_port = port;
}else{
console.log('port number must be decimal number or empty(empty means 0=any port) : ' + JSON.stringify(port));
process.exit(0);
}
cliutil.getConsoleInput('Delete host CUK(default empty) : ', true, false, function(isbreak, cuk)
{
if(isbreak){
process.exit(0);
}
var _cuk = null;
if(apiutil.isSafeString(cuk) && apiutil.isSafeString(cuk.trim())){
_cuk = cuk.trim();
}
// run
deleteV1Role(_token, _name, _hostname, _port, _cuk);
});
});
});
});
}else if('token' === _type){
cliutil.getConsoleInput('Scoped role token : ', true, false, function(isbreak, token)
{
if(isbreak){
process.exit(0);
}
var _token = 'R=' + token;
// run
deleteV1Role(_token, _name);
});
}else{ // role
cliutil.getConsoleInput('Scoped user token : ', true, false, function(isbreak, token)
{
if(isbreak){
process.exit(0);
}
var _token = 'U=' + token;
// run
deleteV1Role(_token, _name);
});
}
});
}
});
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
* vim600: noexpandtab sw=4 ts=4 fdm=marker
* vim<600: noexpandtab sw=4 ts=4
*/