Skip to content

Commit

Permalink
Minor refactoring in the tunnel module:
Browse files Browse the repository at this point in the history
- proxyHeaderWhiteList, proxyHeaderExclusiveList and proxyHeaders
  are no longer public properties of the request instance
  • Loading branch information
simov committed Jun 6, 2015
1 parent da7bab6 commit 6e50b35
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
30 changes: 20 additions & 10 deletions lib/tunnel.js
Expand Up @@ -66,15 +66,15 @@ function constructProxyHeaderWhiteList(headers, proxyHeaderWhiteList) {
}, {})
}

function constructTunnelOptions (request) {
function constructTunnelOptions (request, proxyHeaders) {
var proxy = request.proxy

var tunnelOptions = {
proxy : {
host : proxy.hostname,
port : +proxy.port,
proxyAuth : proxy.auth,
headers : request.proxyHeaders
headers : proxyHeaders
},
headers : request.headers,
ca : request.ca,
Expand Down Expand Up @@ -107,6 +107,8 @@ function getTunnelFn(request) {

function Tunnel (request) {
this.request = request
this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList
this.proxyHeaderExclusiveList = []
}

Tunnel.prototype.isEnabled = function (options) {
Expand Down Expand Up @@ -136,10 +138,12 @@ Tunnel.prototype.isEnabled = function (options) {
return undefined
}

Tunnel.prototype.setup = function () {
Tunnel.prototype.setup = function (options) {
var self = this
, request = self.request

options = options || {}

if (typeof request.proxy === 'string') {
request.proxy = url.parse(request.proxy)
}
Expand All @@ -149,20 +153,26 @@ Tunnel.prototype.setup = function () {
}

// Setup Proxy Header Exclusive List and White List
request.proxyHeaderExclusiveList = request.proxyHeaderExclusiveList || []
request.proxyHeaderWhiteList = request.proxyHeaderWhiteList || defaultProxyHeaderWhiteList
var proxyHeaderExclusiveList = request.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList)
var proxyHeaderWhiteList = request.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList)
if (options.proxyHeaderWhiteList) {
self.proxyHeaderWhiteList = options.proxyHeaderWhiteList
}
if (options.proxyHeaderExclusiveList) {
self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList
}

var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList)
var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList)

// Setup Proxy Headers and Proxy Headers Host
// Only send the Proxy White Listed Header names
request.proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList)
request.proxyHeaders.host = constructProxyHost(request.uri)
var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList)
proxyHeaders.host = constructProxyHost(request.uri)

proxyHeaderExclusiveList.forEach(request.removeHeader, request)

// Set Agent from Tunnel Data
var tunnelFn = getTunnelFn(request)
var tunnelOptions = constructTunnelOptions(request)
var tunnelOptions = constructTunnelOptions(request, proxyHeaders)
request.agent = tunnelFn(tunnelOptions)

return true
Expand Down
2 changes: 1 addition & 1 deletion request.js
Expand Up @@ -295,7 +295,7 @@ Request.prototype.init = function (options) {

self.tunnel = self._tunnel.isEnabled(options)
if (self.proxy) {
self._tunnel.setup()
self._tunnel.setup(options)
}

self._redirect.onRequest(options)
Expand Down

0 comments on commit 6e50b35

Please sign in to comment.