47 lines
882 B
Plaintext
47 lines
882 B
Plaintext
|
// @flow
|
||
|
|
||
|
import Logger from '../Logger';
|
||
|
|
||
|
type ProxyControllerType = {|
|
||
|
HTTP_PROXY: string | null,
|
||
|
HTTPS_PROXY: string | null,
|
||
|
NO_PROXY: string | null,
|
||
|
|};
|
||
|
|
||
|
const log = Logger.child({
|
||
|
namespace: 'createProxyController',
|
||
|
});
|
||
|
|
||
|
const KNOWN_PROPERTY_NAMES = [
|
||
|
'HTTP_PROXY',
|
||
|
'HTTPS_PROXY',
|
||
|
'NO_PROXY',
|
||
|
];
|
||
|
|
||
|
export default (): ProxyControllerType => {
|
||
|
// eslint-disable-next-line fp/no-proxy
|
||
|
return new Proxy({
|
||
|
HTTP_PROXY: null,
|
||
|
HTTPS_PROXY: null,
|
||
|
NO_PROXY: null,
|
||
|
}, {
|
||
|
set: (subject, name, value) => {
|
||
|
if (!KNOWN_PROPERTY_NAMES.includes(name)) {
|
||
|
throw new Error('Cannot set an unmapped property "' + name + '".');
|
||
|
}
|
||
|
|
||
|
subject[name] = value;
|
||
|
|
||
|
log.info({
|
||
|
change: {
|
||
|
name,
|
||
|
value,
|
||
|
},
|
||
|
newConfiguration: subject,
|
||
|
}, 'configuration changed');
|
||
|
|
||
|
return true;
|
||
|
},
|
||
|
});
|
||
|
};
|