From a4de553cc1ec34f68258d7ccd1f36776a19ac44a Mon Sep 17 00:00:00 2001 From: Nicholas Penree Date: Tue, 17 Jan 2017 16:51:55 -0500 Subject: [PATCH] Add support for HTTP(S) proxy --- cli.js | 16 ++++++++++++++-- package.json | 5 +++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/cli.js b/cli.js index e357eb0..9f5782a 100755 --- a/cli.js +++ b/cli.js @@ -10,6 +10,7 @@ var s3 = require('s3'); var url = require('url'); var http = require('http'); var https = require('https'); +var ProxyAgent = require('https-proxy-agent'); var argOptions = { 'default': { 'config': path.join(osenv.home(), '.s3cfg'), @@ -69,25 +70,36 @@ fs.readFile(args.config, {encoding: 'utf8'}, function(err, contents) { if (config && config.default) { accessKeyId = config.default.access_key; secretAccessKey = config.default.secret_key; + proxyHost = config.default.proxy_host; + proxyPort = config.default.proxy_port; } if (!secretAccessKey || !accessKeyId) { console.error("Config file missing access_key or secret_key"); process.exit(1); return; } - setup(secretAccessKey, accessKeyId); + setup(secretAccessKey, accessKeyId, proxyHost, proxyPort); }); -function setup(secretAccessKey, accessKeyId) { +function setup(secretAccessKey, accessKeyId, proxyHost, proxyPort) { var maxSockets = parseInt(args['max-sockets'], 10); http.globalAgent.maxSockets = maxSockets; https.globalAgent.maxSockets = maxSockets; + var agent; + + if (proxyHost && proxyPort) { + agent = new ProxyAgent({ host: proxyHost, port: proxyPort }); + agent.maxSockets = maxSockets; + } client = s3.createClient({ s3Options: { accessKeyId: accessKeyId, secretAccessKey: secretAccessKey, sslEnabled: !args.insecure, region: args.region, + httpOptions: { + agent: agent + }, }, }); var cmd = args._.shift(); diff --git a/package.json b/package.json index c999c76..1b0c484 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,12 @@ "author": "Andrew Kelley ", "license": "MIT", "dependencies": { + "https-proxy-agent": "^1.0.0", + "human-size": "~1.1.0", "ini": "~1.2.1", "minimist": "~1.1.0", "osenv": "~0.1.0", - "s3": "~4.2.0", - "human-size": "~1.1.0" + "s3": "~4.2.0" }, "devDependencies": {}, "scripts": {