diff --git a/red/runtime/storage/localfilesystem/projects/ssh/keygen.js b/red/runtime/storage/localfilesystem/projects/ssh/keygen.js index 1663329a2..d7081c154 100644 --- a/red/runtime/storage/localfilesystem/projects/ssh/keygen.js +++ b/red/runtime/storage/localfilesystem/projects/ssh/keygen.js @@ -33,14 +33,14 @@ function runSshKeygenCommand(args,cwd,env) { stderr += data; }); child.on('close', function(code, signal) { - console.log(code); - console.log(stdout); - console.log(stderr); + // console.log(code); + // console.log(stdout); + // console.log(stderr); if (code !== 0) { var err = new Error(stderr); err.stdout = stdout; err.stderr = stderr; - if (/passphrase is too short/.test(stderr)) { + if (/short/.test(stderr)) { err.code = "key_passphrase_too_short"; } else if(/Key must at least be 1024 bits/.test(stderr)) { err.code = "key_length_too_short"; @@ -60,7 +60,13 @@ function init(_settings, _runtime) { function generateKey(options) { var args = ['-q', '-t', 'rsa']; + var err; if (options.size) { + if (options.size < 1024) { + err = new Error("key_length_too_short"); + err.code = "key_length_too_short"; + throw err; + } args.push('-b', options.size); } if (options.location) { @@ -69,7 +75,16 @@ function generateKey(options) { if (options.comment) { args.push('-C', options.comment); } - args.push('-N', options.password||''); + if (options.password) { + if (options.password.length < 5) { + err = new Error("key_passphrase_too_short"); + err.code = "key_passphrase_too_short"; + throw err; + } + args.push('-N', options.password||''); + } else { + args.push('-N', ''); + } return runSshKeygenCommand(args,__dirname); } diff --git a/test/red/runtime/storage/localfilesystem/projects/ssh/keygen_spec.js b/test/red/runtime/storage/localfilesystem/projects/ssh/keygen_spec.js index 6239931eb..92e41cd40 100644 --- a/test/red/runtime/storage/localfilesystem/projects/ssh/keygen_spec.js +++ b/test/red/runtime/storage/localfilesystem/projects/ssh/keygen_spec.js @@ -24,7 +24,9 @@ var keygen = require("../../../../../../../red/runtime/storage/localfilesystem/p describe("localfilesystem/projects/ssh/keygen", function() { afterEach(function() { - child_process.spawn.restore(); + if (child_process.spawn.restore) { + child_process.spawn.restore(); + } }) it("invokes sshkeygen", function(done) { @@ -47,7 +49,7 @@ describe("localfilesystem/projects/ssh/keygen", function() { }); keygen.generateKey({ - size: 123, + size: 1024, location: 'location', comment: 'comment', password: 'password' @@ -63,66 +65,44 @@ describe("localfilesystem/projects/ssh/keygen", function() { var command; var args; var opts; - sinon.stub(child_process,"spawn", function(_command,_args,_opts) { - _command = command; - _args = args; - _opts = opts; - var e = new EventEmitter(); - e.stdout = new EventEmitter(); - e.stderr = new EventEmitter(); - setTimeout(function() { - e.stdout.emit("data","result"); - e.stderr.emit("data","passphrase is too short"); - e.emit("close",1); - },5) - return e; - }); - - keygen.generateKey({ - size: 123, - location: 'location', - comment: 'comment', - password: 'password' - }).then(function(output) { - done(new Error("Error not thrown")); - }).catch(function(err) { + try { + keygen.generateKey({ + size: 1024, + location: 'location', + comment: 'comment', + password: '123' + }).then(function(output) { + done(new Error("Error not thrown")); + }).catch(function(err) { + done(new Error("Error not thrown")); + }) + } catch(err) { err.should.have.property("code","key_passphrase_too_short"); done(); - }) + } }); it("reports key length too short", function(done) { var command; var args; var opts; - sinon.stub(child_process,"spawn", function(_command,_args,_opts) { - _command = command; - _args = args; - _opts = opts; - - var e = new EventEmitter(); - e.stdout = new EventEmitter(); - e.stderr = new EventEmitter(); - setTimeout(function() { - e.stdout.emit("data","result"); - e.stderr.emit("data","Key must at least be 1024 bits"); - e.emit("close",1); - },50) - return e; - }); - - keygen.generateKey({ - size: 123, - location: 'location', - comment: 'comment', - password: 'password' - }).then(function(output) { - done(new Error("Error not thrown")); - }).catch(function(err) { + try { + keygen.generateKey({ + size: 123, + location: 'location', + comment: 'comment', + password: 'password' + }).then(function(output) { + done(new Error("Error not thrown")); + }).catch(function(err) { + done(new Error("Error not thrown")); + }) + } catch(err) { err.should.have.property("code","key_length_too_short"); done(); - }) + + } });