ssh-tunnel
Version:
SSH-Tunnel management utility
125 lines (108 loc) • 2.47 kB
JavaScript
/**
* Module dependencies: Core
*/
var app = require('./app');
/**
* Module dependencies: FileSystem
*/
var path = require('path');
var dirname = path.dirname;
var basename = path.basename;
var fs = require('fs');
var exists = fs.existsSync;
/**
* Module dependencies: Process
*/
var child_process = require('child_process');
var spawn = child_process.spawn;
var exec = child_process.exec;
/**
* Module dependencies: Utilities
*/
var _ = require('underscore');
/**
* Module dependencies: Terminal
*/
var colors = require('colors');
/**
* Module configuration
*/
var debug = true;
/**
* Module definition
*/
exports = module.exports = new Tunnel();
/**
* Module extension
*/
exports.Tunnel = Tunnel;
/**
* Initialize a new `Tunnel`.
*
* @param {Object} options
* @api public
*/
function Tunnel(options) {
}
/**
* Inherit from `EventEmitter.prototype`.
*/
Tunnel.prototype.__proto__ = require('events').EventEmitter.prototype;
/**
* @api public
*/
Tunnel.prototype.connect = function(localHostname, localPort, remoteNetwork, remoteHostname, remotePort, remoteUser){
var cmd = 'ssh -N -L '+localPort+':'+remoteHostname+':'+remotePort+' '+remoteUser+'@'+remoteNetwork;
delegateExecCall(this, cmd, 'connect');
};
/**
* Install ssh key on remote machine (passwordless auth)
*
* @api public
*/
Tunnel.prototype.install = function(remoteNetwork, remoteUser){
var cmd = 'ssh-copy-id '+remoteUser+'@'+remoteNetwork;
delegateExecCall(this, cmd, 'install');
};
/**
* Install ssh key on remote machine (passwordless auth)
*
* @api public
*/
Tunnel.prototype.selfupdate = function(){
var cmd = 'sudo npm update -g ssh-tunnel';
delegateExecCall(this, cmd, 'selfupdate');
};
/**
* Load configuration from disk
*
* @api public
*/
Tunnel.prototype.load = function(options){
var options = options || {};
return app.init(options);
};
/**
* Miscellaneous helpers
*
* TODO: clean implementation
*/
function delegateExecCall(tunnel, cmd, event){
tunnel.emit(event);
if(debug) console.log(cmd);
exec(cmd, function(err, stdout, stderr){
logExecCall(err, stdout, stderr);
});
}
function logExecCall(err, stdout, stderr){
if(typeof(stderr)!='undefined' && stderr!=null) {
console.log();
console.log(stderr.error);
}
if(typeof(err)!='undefined' && err!=null) {
console.log(JSON.stringify(err, undefined, 2));
}
if(typeof(stdout)!='undefined') {
console.log(stdout.verbose);
}
}