Use proxy-http-request.
This commit is contained in:
@@ -60,6 +60,7 @@
|
||||
"lodash.pluck": "^3.0.2",
|
||||
"make-error": "^0.3.0",
|
||||
"multikey-hash": "^1.0.1",
|
||||
"proxy-http-request": "0.0.1",
|
||||
"require-tree": "~1.0.1",
|
||||
"schema-inspector": "^1.5.1",
|
||||
"serve-static": "^1.9.2",
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
//====================================================================
|
||||
|
||||
var formatQueryString = require('querystring').stringify;
|
||||
var httpRequest = require('http').request;
|
||||
var httpsRequest = require('https').request;
|
||||
var parseUrl = require('url').parse;
|
||||
|
||||
var assign = require('lodash.assign');
|
||||
var debug = require('debug')('xo:proxyRequest');
|
||||
var forEach = require('lodash.foreach');
|
||||
var isString = require('lodash.isstring');
|
||||
|
||||
//====================================================================
|
||||
|
||||
var DEFAULTS = {
|
||||
method: 'GET',
|
||||
};
|
||||
|
||||
var HTTP_RE = /^http(s?):?$/;
|
||||
|
||||
//====================================================================
|
||||
|
||||
function proxyRequest(opts, upReq, upRes) {
|
||||
if (isString(opts)) {
|
||||
debug('parsing URL %s', opts);
|
||||
|
||||
opts = parseUrl(opts);
|
||||
}
|
||||
|
||||
// Merges options with defaults.
|
||||
opts = assign({}, DEFAULTS, {
|
||||
method: upReq.method,
|
||||
}, opts);
|
||||
|
||||
opts.headers = assign({},
|
||||
DEFAULTS.headers,
|
||||
upReq.headers,
|
||||
{
|
||||
connection: 'close',
|
||||
host: opts.hostname || opts.host,
|
||||
},
|
||||
opts.headers
|
||||
);
|
||||
|
||||
// `http(s).request()` does not understand pathname, query and
|
||||
// search.
|
||||
if (!opts.path) {
|
||||
var path = opts.pathname || '/';
|
||||
var query;
|
||||
|
||||
if (opts.search) {
|
||||
path += opts.search;
|
||||
} else if ((query = opts.query)) {
|
||||
if (!isString(query)) {
|
||||
query = formatQueryString(query);
|
||||
}
|
||||
|
||||
path += '?' + query;
|
||||
}
|
||||
|
||||
opts.path = path;
|
||||
}
|
||||
|
||||
var matches;
|
||||
var isSecure = !!(
|
||||
opts.protocol &&
|
||||
(matches = opts.protocol.match(HTTP_RE)) &&
|
||||
matches[1]
|
||||
);
|
||||
delete opts.protocol;
|
||||
|
||||
debug('proxying %s http%s://%s%s',
|
||||
opts.method,
|
||||
isSecure ? 's' : '',
|
||||
opts.hostname,
|
||||
opts.path
|
||||
);
|
||||
|
||||
var request = isSecure ? httpsRequest : httpRequest;
|
||||
|
||||
var downReq = request(opts, function onResponse(downRes) {
|
||||
forEach(downRes.headers, function forwardResponseHeaderUp(value, name) {
|
||||
upRes.setHeader(name, value);
|
||||
});
|
||||
|
||||
downRes.pipe(upRes);
|
||||
|
||||
downRes.on('error', function forwardResponseErrorUp(error) {
|
||||
upRes.emit('error', error);
|
||||
});
|
||||
});
|
||||
upReq.pipe(downReq);
|
||||
|
||||
downReq.on('error', function forwardRequestErrorUp(error) {
|
||||
upReq.emit('error', error);
|
||||
});
|
||||
|
||||
upReq.on('close', function forwardRequestAbortionDown() {
|
||||
downReq.abort();
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = proxyRequest;
|
||||
@@ -9,6 +9,7 @@ $isEmpty = require 'lodash.isempty'
|
||||
$isString = require 'lodash.isstring'
|
||||
$pluck = require 'lodash.pluck'
|
||||
$Promise = require 'bluebird'
|
||||
$proxyRequest = require 'proxy-http-request'
|
||||
{createClient: $createRedisClient} = require 'then-redis'
|
||||
{
|
||||
hash: $hash
|
||||
@@ -18,7 +19,6 @@ $Promise = require 'bluebird'
|
||||
|
||||
$Connection = require './connection'
|
||||
$Model = require './model'
|
||||
$proxyRequest = require './proxy-request'
|
||||
$RedisCollection = require './collection/redis'
|
||||
$spec = require './spec'
|
||||
$XAPI = require './xapi'
|
||||
|
||||
Reference in New Issue
Block a user