Skip to content
This repository was archived by the owner on Mar 28, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions lib/SymBotClient/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,20 @@ SymBotClient.initBot = (pathToConfigFile, pathToLoadBalancerConfigFile) => {
})
}

SymBotClient.initBotFromObjects = (config, loadBalancerConfig) => {
return SymConfigLoader.loadFromObject(config).then(SymConfig => {
if (loadBalancerConfig) {
return SymLoadBalancerConfigLoader.loadFromObjects(loadBalancerConfig, SymConfig).then(SymLoadBalancerConfig => {
SymBotClient.config = SymLoadBalancerConfig
return SymBotClient.authenticateBot(SymLoadBalancerConfig)
})
} else {
SymBotClient.config = SymConfig
return SymBotClient.authenticateBot(SymConfig)
}
})
}

/* Authentication */
SymBotClient.authenticateBot = (SymConfig) => {
return SymBotAuth.authenticate(SymConfig).then(symAuth => {
Expand Down
37 changes: 14 additions & 23 deletions lib/SymConfigLoader/index.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,20 @@
const fs = require('fs')
const util = require('util')
const Q = require('q')
const HttpsProxyAgent = require('https-proxy-agent')
const url = require('url')

var SymConfigLoader = {}
let SymConfigLoader = {}

SymConfigLoader.loadFromFile = (path) => {
var defer = Q.defer()

fs.readFile(path, function (err, data) {
if (err) {
defer.reject(err)
return
}

let config
try {
config = JSON.parse(data)
} catch (err) {
defer.reject(err)
return
}
// using util.promisify instead of fs/promise because of unit tests mocking fs.readFile
return util.promisify(fs.readFile)(path)
.then(JSON.parse)
.then(SymConfigLoader.loadFromObject);
}

SymConfigLoader.loadFromObject = (config) => {
return Q.fcall(() => {
// back compat
if (config.proxyURL) {
config.podProxyURL = config.proxyURL
Expand Down Expand Up @@ -56,19 +49,17 @@ SymConfigLoader.loadFromFile = (path) => {
// compatibility with SymLoadBalancerConfigLoader,
// if LB is used, these functions are overridden
config.getAgentHost = async () => config.agentHost
config.rotateAgent = async () => { }
config.rotateAgent = async () => {
}

// Do not reject self-signed certificates for API calls
// ** Do not set this variable for Production Environments **
if (config.nodeTlsRejectUnauthorized === 0) {
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0
}

SymConfigLoader.SymConfig = config
defer.resolve(config)
})

return defer.promise
SymConfigLoader.SymConfig = config;
return config;
});
}

module.exports = SymConfigLoader
31 changes: 10 additions & 21 deletions lib/SymLoadBalancerConfigLoader/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const fs = require('fs')
const util = require('util')
const Q = require('q')

const request = require('../Request')
Expand All @@ -14,31 +15,19 @@ const loadBalancingMethod = {
}

SymLoadBalancerConfigLoader.loadFromFile = (path, SymConfig) => {
let defer = Q.defer()

fs.readFile(path, function (err, data) {
if (err) {
defer.reject(err)
return
}

let config
try {
config = JSON.parse(data)
} catch (err) {
defer.reject(err)
return
}
return util.promisify(fs.readFile)(path)
.then(JSON.parse)
.then((lbConfig) => SymLoadBalancerConfigLoader.loadFromObjects(lbConfig, SymConfig));
}

enhanceSymConfig(config, SymConfig)
SymLoadBalancerConfigLoader.loadFromObjects = (lbConfig, SymConfig) => {
return Q.fcall(() => {
enhanceSymConfig(lbConfig, SymConfig)
SymConfig.getAgentHost = getAgentHost
SymConfig.rotateAgent = rotateAgent
SymConfig.getActualAgentHost = getActualAgentHost

defer.resolve(SymConfig)
})

return defer.promise
return SymConfig
});
}

function enhanceSymConfig (configFromFile, SymConfig) {
Expand Down
106 changes: 106 additions & 0 deletions tests/SymConfigLoader/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ describe('SymConfigLoader', () => {
});
});

it('creates a proxy from object', () => {
return SymConfigLoader.loadFromObject({
proxyURL: 'https://agent-proxy-url/',
}).then(config => {
expect(config.agentProxy.proxy.href).toEqual('https://agent-proxy-url/');
});
});

it('creates an authenticated proxy', () => {
mockFs.readFile = jest.fn((path, cb) => {
return cb(null, JSON.stringify({
Expand All @@ -41,6 +49,18 @@ describe('SymConfigLoader', () => {
});
});

it('creates an authenticated proxy from object', () => {
return SymConfigLoader.loadFromObject({
proxyURL: 'https://agent-proxy-url/',
proxyUsername: 'test-user',
proxyPassword: 'test-pass',
}).then(config => {
expect(config.agentProxy.proxy.href).toEqual(
'https://test-user:test-pass@agent-proxy-url/'
);
});
});

it('encodes special characters', () => {
mockFs.readFile = jest.fn((path, cb) => {
return cb(null, JSON.stringify({
Expand All @@ -57,8 +77,21 @@ describe('SymConfigLoader', () => {
);
});
});

it('encodes special characters from object', () => {
return SymConfigLoader.loadFromObject({
proxyURL: 'https://agent-proxy-url/',
proxyUsername: 'test-user-$%',
proxyPassword: 'test-pass-$%',
}).then(config => {
expect(config.agentProxy.proxy.href).toEqual(
'https://test-user-%24%25:test-pass-%24%25@agent-proxy-url/'
);
});
});
});


describe('pod proxy', () => {
it('creates a proxy', () => {
mockFs.readFile = jest.fn((path, cb) => {
Expand All @@ -73,6 +106,14 @@ describe('SymConfigLoader', () => {
});
});

it('creates a proxy from object', () => {
return SymConfigLoader.loadFromObject({
proxyURL: 'https://pod-proxy-url/',
}).then(config => {
expect(config.podProxy.proxy.href).toEqual('https://pod-proxy-url/');
});
});

it('creates an authenticated proxy', () => {
mockFs.readFile = jest.fn((path, cb) => {
return cb(null, JSON.stringify({
Expand All @@ -90,6 +131,18 @@ describe('SymConfigLoader', () => {
});
});

it('creates an authenticated proxy from object', () => {
return SymConfigLoader.loadFromObject({
proxyURL: 'https://pod-proxy-url/',
proxyUsername: 'test-user',
proxyPassword: 'test-pass',
}).then(config => {
expect(config.podProxy.proxy.href).toEqual(
'https://test-user:test-pass@pod-proxy-url/'
);
});
});

it('encodes special characters', () => {
mockFs.readFile = jest.fn((path, cb) => {
return cb(null, JSON.stringify({
Expand All @@ -107,6 +160,18 @@ describe('SymConfigLoader', () => {
});
});

it('encodes special characters from object', () => {
return SymConfigLoader.loadFromObject({
proxyURL: 'https://pod-proxy-url/',
proxyUsername: 'test-user-$%',
proxyPassword: 'test-pass-$%',
}).then(config => {
expect(config.podProxy.proxy.href).toEqual(
'https://test-user-%24%25:test-pass-%24%25@pod-proxy-url/'
);
});
});

it('creates a proxy for only the pod', () => {
mockFs.readFile = jest.fn((path, cb) => {
return cb(null, JSON.stringify({
Expand All @@ -120,6 +185,15 @@ describe('SymConfigLoader', () => {
expect(config.agentProxy).toBeUndefined();
});
});

it('creates a proxy for only the pod from object', () => {
return SymConfigLoader.loadFromObject({
podProxyURL: 'https://pod-proxy-url/',
}).then(config => {
expect(config.podProxy.proxy.href).toEqual('https://pod-proxy-url/');
expect(config.agentProxy).toBeUndefined();
});
});
});

describe('keyManager proxy', () => {
Expand All @@ -136,6 +210,14 @@ describe('SymConfigLoader', () => {
});
});

it('creates a proxy from object', () => {
return SymConfigLoader.loadFromObject({
keyManagerProxyURL: 'https://km-proxy-url/',
}).then(config => {
expect(config.keyManagerProxy.proxy.href).toEqual('https://km-proxy-url/');
});
});

it('creates an authenticated proxy', () => {
mockFs.readFile = jest.fn((path, cb) => {
return cb(null, JSON.stringify({
Expand All @@ -153,6 +235,18 @@ describe('SymConfigLoader', () => {
});
});

it('creates an authenticated proxy from object', () => {
return SymConfigLoader.loadFromObject({
keyManagerProxyURL: 'https://km-proxy-url/',
keyManagerProxyUsername: 'test-user',
keyManagerProxyPassword: 'test-pass',
}).then(config => {
expect(config.keyManagerProxy.proxy.href).toEqual(
'https://test-user:test-pass@km-proxy-url/'
);
});
});

it('encodes special characters', () => {
mockFs.readFile = jest.fn((path, cb) => {
return cb(null, JSON.stringify({
Expand All @@ -169,6 +263,18 @@ describe('SymConfigLoader', () => {
);
});
});

it('encodes special characters from object', () => {
return SymConfigLoader.loadFromObject({
keyManagerProxyURL: 'https://km-proxy-url/',
keyManagerProxyUsername: 'test-user-$%',
keyManagerProxyPassword: 'test-pass-$%',
}).then(config => {
expect(config.keyManagerProxy.proxy.href).toEqual(
'https://test-user-%24%25:test-pass-%24%25@km-proxy-url/'
);
});
});
});
});
});
10 changes: 10 additions & 0 deletions tests/SymLoadBalancerConfigLoader/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,14 @@ describe('SymLoadBalancerConfigLoader', () => {
expect(SymBotClient.config.agentServers.length).toEqual(lbMockConfig.agentServers.length);
});
});

it('configures lb from objects', () => {
return SymBotClient.initBotFromObjects(mainMockConfig, lbMockConfig).then(symAuth => {
expect(SymBotClient.config.podHost).toEqual(mainMockConfig.podHost);

expect(SymBotClient.config.loadBalancing.method).toEqual(lbMockConfig.loadBalancing.method);
expect(SymBotClient.config.loadBalancing.method).toEqual(lbMockConfig.loadBalancing.method);
expect(SymBotClient.config.agentServers.length).toEqual(lbMockConfig.agentServers.length);
});
});
});