support alternative cacert

This commit is contained in:
Brent Shikoski 2023-09-04 15:49:36 -05:00
parent 99239e19b4
commit 1ed39a5ea6
2 changed files with 36 additions and 2 deletions

View File

@ -113,6 +113,10 @@ const builder = async (yargs) => {
type: 'boolean', type: 'boolean',
default: false default: false
}) })
.option('cacert', {
type: 'string',
description: 'CA certificate to verify peer against'
})
.option('env', { .option('env', {
describe: 'Environment variables', describe: 'Environment variables',
type: 'string', type: 'string',
@ -131,6 +135,7 @@ const handler = async function (argv) {
try { try {
let { let {
filename, filename,
cacert,
env, env,
insecure, insecure,
r: recursive r: recursive
@ -178,7 +183,21 @@ const handler = async function (argv) {
const options = getOptions(); const options = getOptions();
if(insecure) { if(insecure) {
options['insecure'] = true options['insecure'] = true
} }
if(cacert && cacert.length) {
if(insecure) {
console.error(chalk.red(`Ignoring the cacert option since insecure connections are enabled`));
}
else {
const pathExists = await exists(cacert);
if(pathExists) {
options['cacert'] = cacert
}
else {
console.error(chalk.red(`Cacert File ${cacert} does not exist`));
}
}
}
const _isFile = await isFile(filename); const _isFile = await isFile(filename);
if(_isFile) { if(_isFile) {

View File

@ -1,5 +1,6 @@
const qs = require('qs'); const qs = require('qs');
const chalk = require('chalk'); const chalk = require('chalk');
const fs = require('fs');
const { forOwn, each, extend, get } = require('lodash'); const { forOwn, each, extend, get } = require('lodash');
const FormData = require('form-data'); const FormData = require('form-data');
const axios = require('axios'); const axios = require('axios');
@ -44,12 +45,26 @@ const runSingleRequest = async function (filename, bruJson, collectionPath, coll
// interpolate variables inside request // interpolate variables inside request
interpolateVars(request, envVariables, collectionVariables); interpolateVars(request, envVariables, collectionVariables);
const insecure = get(getOptions(), 'insecure', false); const options = getOptions();
const insecure = get(options, 'insecure', false);
if(insecure) { if(insecure) {
request.httpsAgent = new https.Agent({ request.httpsAgent = new https.Agent({
rejectUnauthorized: false rejectUnauthorized: false
}); });
} }
else {
const cacert = options['cacert'];
if (cacert && cacert.length > 1) {
try {
caCrt = fs.readFileSync(cacert)
request.httpsAgent = new https.Agent({
ca: caCrt
});
} catch(err) {
console.log('Error reading CA cert file:' + cacert, err);
}
}
}
// stringify the request url encoded params // stringify the request url encoded params
if(request.headers['content-type'] === 'application/x-www-form-urlencoded') { if(request.headers['content-type'] === 'application/x-www-form-urlencoded') {