Plato on Github
Report Home
lib/opensesame.js
Maintainability
75.27
Lines of code
82
Difficulty
20.78
Estimated Errors
0.47
Function weight
By Complexity
By SLOC
"use strict" /* eslint no-unused-vars: 0 */ import async from 'async'; import Aws from './service/aws.js'; import OpenapiIpify from 'openapi_ipify'; import util from 'util'; /** * class OpenSesame */ class OpenSesame { /** * Construct OpenSesame object. * * @param {Object} opts: optional settings * - port: port numbeer of the ingress rule * - protocol: protocol of the ingress rule * - name: name of the ingress rule * - dryRun: when true, changelog file won't be modified */ constructor(opts) { this.opts = opts || {}; this.opts.port = this.opts.port || 22; this.opts.protocol = this.opts.protocol || 'tcp'; this.opts.dryRun = this.opts.dryRun || false; this.opts.name = this.opts.name || 'open-sesame'; } /** * Add public IP address to AWS security group inbound rules. * * @param {String} region: AWS region * @param {Array} secGroupIds: an array of AWS security group IDs * @param {Function} cb: standard cb(err, result) callback */ aws(region, secGroupIds, cb) { const self = this; function createAddIpToSecGroupTask(aws, ip, secGroupId) { function task(cb) { aws.addIpToSecGroup(self.opts.protocol, ip, self.opts.port, secGroupId, self.opts.name, cb); } return task; } function addPublicIp(err, ip) { if (err) { cb(err); } else { const tasks = []; const aws = new Aws(region, self.opts); secGroupIds.forEach(function (secGroupId) { tasks.push(createAddIpToSecGroupTask(aws, ip, secGroupId)); }); async.series(tasks, cb); } } this._getPublicIp(addPublicIp); } _getPublicIp(cb) { console.log('--\nRetrieving public IP address...'); const api = new OpenapiIpify.DefaultApi(); const _cb = function(err, data, res) { if (err) { console.error('Unable to retrieve public IP'); cb(err); } else { console.log(util.format('IP is %s', data)); cb(null, data); } }; api.getIp({}, _cb); } } export { OpenSesame as default };