107 lines
No EOL
2.6 KiB
JavaScript
107 lines
No EOL
2.6 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.exec = undefined;
|
|
exports.default = exec;
|
|
|
|
var _child_process = require('child_process');
|
|
|
|
var isFunction = function isFunction(maybeFunction) {
|
|
return typeof maybeFunction === 'function';
|
|
};
|
|
|
|
var expectedStderrForAction = {
|
|
'cms.verify': /^verification successful/i,
|
|
'genrsa': /^generating/i,
|
|
'pkcs12': /^mac verified ok/i,
|
|
'req.new': /^generating/i,
|
|
'req.verify': /^verify ok/i,
|
|
'rsa': /^writing rsa key/i,
|
|
'smime.verify': /^verification successful/i,
|
|
'x509.req': /^signature ok/i
|
|
};
|
|
|
|
function exec(action, maybeBuffer, maybeOptions, maybeCallback) {
|
|
// Support option re-ordering
|
|
var buffer = maybeBuffer;
|
|
var options = maybeOptions;
|
|
var callback = maybeCallback;
|
|
if (!Buffer.isBuffer(buffer)) {
|
|
callback = options;
|
|
options = buffer;
|
|
buffer = false;
|
|
}
|
|
if (isFunction(options)) {
|
|
callback = options;
|
|
options = {};
|
|
}
|
|
|
|
// Build initial params with passed action
|
|
var params = action.split('.').map(function (value, key) {
|
|
return !key ? value : '-' + value;
|
|
});
|
|
var lastParams = [];
|
|
Object.keys(options).forEach(function (key) {
|
|
if (options[key] === false) {
|
|
lastParams.push(key);
|
|
} else if (options[key] === true) {
|
|
params.push('-' + key);
|
|
} else {
|
|
if (Array.isArray(options[key])) {
|
|
options[key].forEach(function (value) {
|
|
params.push('-' + key, value);
|
|
});
|
|
} else {
|
|
params.push('-' + key, options[key]);
|
|
}
|
|
}
|
|
});
|
|
// Append last params
|
|
params = params.concat(lastParams);
|
|
|
|
// Actually spawn openssl command
|
|
var openssl = (0, _child_process.spawn)('openssl', params);
|
|
var outResult = [];
|
|
var outLength = 0;
|
|
var errResult = [];
|
|
var errLength = 0;
|
|
|
|
openssl.stdout.on('data', function (data) {
|
|
outLength += data.length;
|
|
outResult.push(data);
|
|
});
|
|
|
|
openssl.stderr.on('data', function (data) {
|
|
errLength += data.length;
|
|
errResult.push(data);
|
|
});
|
|
|
|
openssl.on('close', function (code) {
|
|
var stdout = Buffer.concat(outResult, outLength);
|
|
var stderr = Buffer.concat(errResult, errLength).toString('utf8');
|
|
var expectedStderr = expectedStderrForAction[action];
|
|
var err = null;
|
|
|
|
if (code || stderr && expectedStderr && !stderr.match(expectedStderr)) {
|
|
err = new Error(stderr);
|
|
err.code = code;
|
|
}
|
|
|
|
if (isFunction(callback)) {
|
|
callback.apply(null, [err, stdout]);
|
|
}
|
|
});
|
|
|
|
if (buffer) {
|
|
openssl.stdin.write(buffer);
|
|
}
|
|
|
|
openssl.stdin.end();
|
|
|
|
return openssl;
|
|
}
|
|
|
|
exports.exec = exec;
|
|
//# sourceMappingURL=index.js.map
|