mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
97 lines
2.9 KiB
JavaScript
97 lines
2.9 KiB
JavaScript
/**
|
|
* Copyright JS Foundation and other contributors, http://js.foundation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
**/
|
|
|
|
var child_process = require('child_process');
|
|
|
|
var sshkeygenCommand = "ssh-keygen";
|
|
|
|
var log = require("@node-red/util").log;
|
|
|
|
function runSshKeygenCommand(args,cwd,env) {
|
|
return new Promise(function(resolve, reject) {
|
|
var child = child_process.spawn(sshkeygenCommand, args, {cwd: cwd, detached: true, env: env});
|
|
var stdout = "";
|
|
var stderr = "";
|
|
|
|
child.stdout.on('data', function(data) {
|
|
stdout += data;
|
|
});
|
|
child.stderr.on('data', function(data) {
|
|
stderr += data;
|
|
});
|
|
child.on('close', function(code, signal) {
|
|
// console.log(code);
|
|
// console.log(stdout);
|
|
// console.log(stderr);
|
|
if (code !== 0) {
|
|
var err = new Error(stderr);
|
|
err.stdout = stdout;
|
|
err.stderr = 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";
|
|
}
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(stdout);
|
|
}
|
|
});
|
|
child.error('error', function(err) {
|
|
if (/ENOENT/.test(err.toString())) {
|
|
err.code = "command_not_found";
|
|
}
|
|
reject(err);
|
|
});
|
|
});
|
|
}
|
|
|
|
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) {
|
|
args.push('-f', options.location);
|
|
}
|
|
if (options.comment) {
|
|
args.push('-C', options.comment);
|
|
}
|
|
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);
|
|
}
|
|
|
|
module.exports = {
|
|
generateKey: generateKey
|
|
};
|