Stackedit/app/ssh.js

62 lines
1.2 KiB
JavaScript
Raw Normal View History

2014-08-19 23:25:22 +00:00
var ssh2 = require('ssh2');
exports.publish = function(req, res) {
var done;
function sendResult(result) {
if(!done) {
res.json(result);
}
done = true;
}
function sendError(error) {
sendResult({error: error});
}
var conn = new ssh2();
conn.on('ready', function() {
conn.sftp(function(err, sftp) {
if(err) {
return sendError('Unable to establish SFTP connection');
}
var writeStream = sftp.createWriteStream(req.query.path);
writeStream.on('close', function() {
sftp.end();
conn.end();
});
writeStream.on('error', function() {
sendError('Unable to write "' + req.query.path + '"');
sftp.end();
conn.end();
});
req.pipe(writeStream);
});
});
conn.on('error', function(err) {
if(err.level == "authentication") {
return sendError('Authentication failure');
}
if(err.code == "ENOTFOUND") {
return sendError('Host not found');
}
if(err.code == "ETIMEDOUT") {
return sendError('Connection timeout');
}
sendError(err);
});
conn.on('end', function() {
sendResult({});
});
conn.connect({
host: req.query.host,
port: req.query.port || 22,
username: req.query.username,
password: req.query.password
});
};