62 lines
1.2 KiB
JavaScript
62 lines
1.2 KiB
JavaScript
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
|
|
});
|
|
}; |