From f01fdf6b0862206e4a2422a05890d87dd068084c Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Fri, 30 Jun 2023 21:57:15 -0700 Subject: [PATCH] Closes #140 - Allow self-cert hosted API --- package.json | 10 +++++----- src/lib/remote.js | 28 ++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 72a2e5f..520674b 100644 --- a/package.json +++ b/package.json @@ -27,19 +27,19 @@ "src/" ], "dependencies": { - "node-fetch": "^2.6.11" + "node-fetch": "^2.6.12" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.59.9", - "@typescript-eslint/parser": "^5.59.9", + "@typescript-eslint/eslint-plugin": "^5.60.1", + "@typescript-eslint/parser": "^5.60.1", "babel-eslint": "^10.1.0", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", - "eslint": "^8.42.0", + "eslint": "^8.44.0", "mocha": "^10.2.0", "mocha-sonarqube-reporter": "^1.0.2", "nyc": "^15.1.0", - "sinon": "^15.1.0" + "sinon": "^15.2.0" }, "repository": { "type": "git", diff --git a/src/lib/remote.js b/src/lib/remote.js index b2efe3d..0644f79 100644 --- a/src/lib/remote.js +++ b/src/lib/remote.js @@ -1,4 +1,6 @@ const fetch = require('node-fetch'); +const https = require('https'); +const http = require('http'); const DateMoment = require('./utils/datemoment'); const { ApiConnectionError, @@ -8,6 +10,15 @@ const { SnapshotServiceError } = require('./exceptions'); +const httpAgent = new http.Agent(); +const httpsAgent = new https.Agent({ + rejectUnauthorized: false, +}); + +const getAgent = (url) => { + return url.startsWith('https') ? httpsAgent : httpAgent; +}; + const getConnectivityError = (code) => `Connection has been refused - ${code}`; const getHeader = (token) => { @@ -55,7 +66,7 @@ exports.getEntry = (input) => { exports.checkAPIHealth = async (url, options) => { try { - const response = await fetch(`${url}/check`, { method: 'get' }); + const response = await fetch(`${url}/check`, { method: 'get', agent: httpsAgent }); if (response.status != 200) throw new ApiConnectionError('API is offline'); } catch (e) { @@ -69,7 +80,8 @@ exports.checkCriteria = async ({ url, token }, key, input, showReason = false) = const response = await fetch(`${url}/criteria?showReason=${showReason}&key=${key}`, { method: 'post', body: JSON.stringify({ entry }), - headers: getHeader(token) + headers: getHeader(token), + agent: getAgent(url) }); @@ -95,7 +107,8 @@ exports.auth = async ({ url, apiKey, domain, component, environment }) => { headers: { 'switcher-api-key': apiKey, 'Content-Type': 'application/json' - } + }, + agent: getAgent(url) }); if (response.status == 200) { @@ -113,7 +126,8 @@ exports.checkSwitchers = async (url, token, switcherKeys) => { const response = await fetch(`${url}/criteria/switchers_check`, { method: 'post', body: JSON.stringify({ switchers: switcherKeys }), - headers: getHeader(token) + headers: getHeader(token), + agent: getAgent(url) }); if (response.status != 200) { @@ -132,7 +146,8 @@ exports.checkSnapshotVersion = async (url, token, version) => { try { const response = await fetch(`${url}/criteria/snapshot_check/${version}`, { method: 'get', - headers: getHeader(token) + headers: getHeader(token), + agent: getAgent(url) }); if (response.status == 200) { @@ -165,7 +180,8 @@ exports.resolveSnapshot = async (url, token, domain, environment, component) => const response = await fetch(`${url}/graphql`, { method: 'post', body: JSON.stringify(data), - headers: getHeader(token) + headers: getHeader(token), + agent: getAgent(url) }); if (response.status == 200) {