aws-cli-js
Advanced tools
Comparing version 0.0.1 to 0.0.2
184
lib/index.js
@@ -24,5 +24,5 @@ /** | ||
var DockerMachine = function (opts) { | ||
if (!(this instanceof DockerMachine)) { | ||
return new DockerMachine(opts); | ||
var AwsCli = function (opts) { | ||
if (!(this instanceof AwsCli)) { | ||
return new AwsCli(opts); | ||
} | ||
@@ -33,8 +33,39 @@ | ||
DockerMachine.prototype.command = function (command, callback) { | ||
AwsCli.prototype.command = function (command, options, callback) { | ||
var self = this; | ||
var exec_command = 'docker-machine '; | ||
var exec_command = 'aws '; | ||
if (!callback) { | ||
callback = options; | ||
options = null; | ||
} | ||
return Promise.resolve().then(function () { | ||
var params = _.reduce(self.driver, function (result, value, key) { | ||
var env_vars = ('HOME PATH AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY ' + | ||
'AWS_SESSION_TOKEN AWS_DEFAULT_REGION ' + | ||
'AWS_DEFAULT_PROFILE AWS_CONFIG_FILE').split(' '); | ||
//console.log('env_vars =', JSON.stringify(env_vars)); | ||
var env = _.reduce(env_vars, function (result, value) { | ||
if (process.env[value]) { | ||
result[value] = process.env[value]; | ||
} | ||
return result; | ||
}, {}); | ||
//console.log('env =', env); | ||
if (self.aws_access_key_id) { | ||
env.AWS_ACCESS_KEY_ID = self.aws_access_key_id; | ||
} | ||
if (self.aws_secret_access_key) { | ||
env.AWS_SECRET_ACCESS_KEY = self.aws_secret_access_key; | ||
} | ||
var params = _.reduce(options, function (result, value, key) { | ||
result += util.format('--%s %s ', key, value); | ||
@@ -48,7 +79,3 @@ return result; | ||
var exec_options = { | ||
env: { | ||
HOME: process.env.HOME, | ||
PATH: process.env.PATH, | ||
DEBUG: '' | ||
} | ||
env: env | ||
}; | ||
@@ -68,2 +95,3 @@ if (self.cwd) { | ||
}; | ||
//return result; | ||
return extractResult(result); | ||
@@ -74,118 +102,44 @@ | ||
module.exports = DockerMachine; | ||
module.exports = AwsCli; | ||
var extractResult = function (result) { | ||
var extracterArray = [ | ||
{ | ||
re: / ls /, | ||
run: function (resultp) { | ||
var obj = JSON.parse(resultp.raw); | ||
var lines = obj[0].split(os.EOL); | ||
try { | ||
var obj = JSON.parse(result.raw); | ||
result.object = JSON.parse(obj[0]); | ||
} catch (e) { | ||
result.object = e; | ||
} | ||
return (resultp.machineList = cliTable2Json(lines)); | ||
} | ||
}, | ||
{ | ||
re: / config /, | ||
run: function (resultp) { | ||
var obj = JSON.parse(resultp.raw); | ||
var str = obj[0]; | ||
var extractValue = function (strp, name, rep) { | ||
var re = rep || new RegExp("--" + name + "=\"([\\S]*)\"", 'i'); | ||
var m; | ||
//var extracterArray = [ | ||
//{ | ||
// re: / ls /, | ||
// run: function (resultp) { | ||
// var obj = JSON.parse(resultp.raw); | ||
// var lines = obj[0].split(os.EOL); | ||
if ((m = re.exec(strp)) !== null) { | ||
if (m.index === re.lastIndex) { | ||
re.lastIndex++; | ||
} | ||
} | ||
// return (resultp.machineList = '???'); | ||
// } | ||
//} | ||
//]; | ||
return (m && m[1]) ? m[1] : null; | ||
}; | ||
//extracterArray.forEach(function (extracter) { | ||
// var re = extracter.re; | ||
// var str = result.command; | ||
// var m; | ||
resultp.machine = { | ||
tlsverify: function (strp) { | ||
var re = /--tlsverify/; | ||
var m; | ||
// if ((m = re.exec(str)) !== null) { | ||
// if (m.index === re.lastIndex) { | ||
// re.lastIndex++; | ||
// } | ||
// // View your result using the m-variable. | ||
// // eg m[0] etc. | ||
// return extracter.run(result); | ||
// } | ||
//}); | ||
if ((m = re.exec(strp)) !== null) { | ||
if (m.index === re.lastIndex) { | ||
re.lastIndex++; | ||
} | ||
} | ||
return (m && m[0] && m[0] === '--tlsverify') || false; | ||
}(str), | ||
tlscacert: extractValue(str, 'tlscacert'), | ||
tlscert: extractValue(str, 'tlscert'), | ||
tlskey: extractValue(str, 'tlskey'), | ||
host: extractValue(str, null, /-H=tcp:\/\/(.*):/), | ||
port: extractValue(str, null, /-H=tcp:\/\/.*:(\d*)/) | ||
}; | ||
return resultp; | ||
} | ||
}, | ||
{ | ||
re: / inspect /, | ||
run: function (resultp) { | ||
var obj = JSON.parse(resultp.raw); | ||
resultp.machine = JSON.parse(obj[0]); | ||
return resultp; | ||
} | ||
}, | ||
]; | ||
extracterArray.forEach(function (extracter) { | ||
var re = extracter.re; | ||
var str = result.command; | ||
var m; | ||
if ((m = re.exec(str)) !== null) { | ||
if (m.index === re.lastIndex) { | ||
re.lastIndex++; | ||
} | ||
// View your result using the m-variable. | ||
// eg m[0] etc. | ||
return extracter.run(result); | ||
} | ||
}); | ||
return result; | ||
}; | ||
var cliTable2Json = function (lines) { | ||
lines[0] = lines[0].toLowerCase(); | ||
var headerline = lines[0]; | ||
var result = []; | ||
var column_headers = headerline.split(/ [ ]+/); | ||
var next_index = 1; | ||
var locations = _.reduce(column_headers, function (result2, title) { | ||
result2[title] = { | ||
start: headerline.indexOf(title), | ||
end: next_index < column_headers.length ? headerline.indexOf(column_headers[next_index++]) : headerline.indexOf(title) + 1000 | ||
}; | ||
return result2; | ||
}, {}); | ||
lines.slice(1).forEach(function (line) { | ||
if (line.trim().length === 0) { | ||
return; | ||
} | ||
var item = {}; | ||
result.push(item); | ||
_.forEach(locations, function (position, title) { | ||
//console.log('position', title, 'position = ', position); | ||
item[title] = line.substring(position.start, position.end).trim(); | ||
}); | ||
}); | ||
return result; | ||
}; |
{ | ||
"name": "aws-cli-js", | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"description": "A node.js wrapper for the aws command line interface", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -29,13 +29,27 @@ # aws-cli-js | ||
var awsCli = new AwsCli({ | ||
profile: 'default', | ||
aws_access_key_id: 'PUTVALUEHERE', | ||
aws_secret_access_key: 'abcdefPUTVALUEHERE' | ||
aws_secret_access_key: 'abcdefPUTVALUEHERE', | ||
}); | ||
awsCli.command('?? ').then(function (data) { | ||
awsCli.command('iam list-users').then(function (data) { | ||
console.log('data = ', data); | ||
}); | ||
//data = { | ||
// command: 'aws iam list-users ', | ||
// raw: '["{\\n \\"Users\\": [\\n {\\n \\"UserName\\": \\"developer\\", \\n \\"PasswordLastUsed\\": \\"2015-10-03T17:58:49Z\\", \\n \\"CreateDate\\": \\"2015-06-03T07:37:25Z\\", \\n \\"UserId\\": \\"AIDAJB73CFKOYE2FBGGM2\\", \\n \\"Path\\": \\"/\\", \\n \\"Arn\\": \\"arn:aws:iam::031641171132:user/developer\\"\\n }\\n ]\\n}\\n",""]', | ||
// object: | ||
// { | ||
// Users: | ||
// [{ | ||
// UserName: 'developer', | ||
// PasswordLastUsed: '2015-10-03T17:58:49Z', | ||
// CreateDate: '2015-06-03T07:37:25Z', | ||
// UserId: 'AIDAJBXXXXXXXXXXXXXXXXX', | ||
// Path: '/', | ||
// Arn: 'arn:aws:iam::03XXXXXXXXX:user/developer' | ||
// }] | ||
// } | ||
//} | ||
``` | ||
@@ -47,6 +61,23 @@ | ||
awsCli.command('??', function (err, data) { | ||
awsCli.command('iam list-users', function (err, data) { | ||
console.log('data = ', data); | ||
}); | ||
//data = { | ||
// command: 'aws iam list-users ', | ||
// raw: '["{\\n \\"Users\\": [\\n {\\n \\"UserName\\": \\"developer\\", \\n \\"PasswordLastUsed\\": \\"2015-10-03T17:58:49Z\\", \\n \\"CreateDate\\": \\"2015-06-03T07:37:25Z\\", \\n \\"UserId\\": \\"AIDAJB73CFKOYE2FBGGM2\\", \\n \\"Path\\": \\"/\\", \\n \\"Arn\\": \\"arn:aws:iam::031641171132:user/developer\\"\\n }\\n ]\\n}\\n",""]', | ||
// object: | ||
// { | ||
// Users: | ||
// [{ | ||
// UserName: 'developer', | ||
// PasswordLastUsed: '2015-10-03T17:58:49Z', | ||
// CreateDate: '2015-06-03T07:37:25Z', | ||
// UserId: 'AIDAJBXXXXXXXXXXXXXXXXX', | ||
// Path: '/', | ||
// Arn: 'arn:aws:iam::03XXXXXXXXX:user/developer' | ||
// }] | ||
// } | ||
//} | ||
``` | ||
@@ -53,0 +84,0 @@ |
@@ -22,4 +22,4 @@ /** | ||
var assert = require('chai').assert; | ||
var util = require('util'); | ||
var config = require('../my_config.json'); | ||
@@ -38,11 +38,16 @@ | ||
it('command ??? should pass', function (done) { | ||
it('command iam list-users should pass', function (done) { | ||
this.timeout(1 * 60 * 1000);//1 minute | ||
var awsCli = new AwsCli(); | ||
var awsCli = new AwsCli({ | ||
aws_access_key_id: config.aws.accessKeyId, | ||
aws_secret_access_key: config.aws.secretAccessKey | ||
//cwd: 'path to current working directory' | ||
}); | ||
assert.isNotNull(awsCli); | ||
var failed = false; | ||
var err = null; | ||
awsCli.command('ip machinename').then(function (data) { | ||
console.log('data = ', data); | ||
awsCli.command('iam list-users').then(function (data) { | ||
//console.log('data = ', util.inspect(data, {depth: 10})); | ||
assert.isNotNull(data); | ||
@@ -57,4 +62,22 @@ }).finally(function () { | ||
it('command iam list-users should pass with callback', function (done) { | ||
this.timeout(1 * 60 * 1000);//1 minute | ||
it('command ls2 should fail', function (done) { | ||
var awsCli = new AwsCli({ | ||
aws_access_key_id: config.aws.accessKeyId, | ||
aws_secret_access_key: config.aws.secretAccessKey | ||
//cwd: 'path to current working directory' | ||
}); | ||
assert.isNotNull(awsCli); | ||
var failed = false; | ||
var err = null; | ||
awsCli.command('iam list-users', function (err, data) { | ||
//console.log('data = ', util.inspect(data, { depth: 10 })); | ||
assert.isNotNull(data); | ||
done(); | ||
}); | ||
}); | ||
it('command aim2 should fail', function (done) { | ||
var awsCli = new AwsCli(); | ||
@@ -64,3 +87,3 @@ assert.isNotNull(awsCli); | ||
var err = null; | ||
awsCli.command('ls2').then(function (data) { | ||
awsCli.command('iam2 list-users').then(function (data) { | ||
//console.log('data = ', data); | ||
@@ -81,7 +104,8 @@ assert.isNotNull(data); | ||
}); | ||
}); | ||
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
22369
94
241