wild-proxy
v4.0.4
Published
<span style="font-size:128">->¿=></span> wild-proxy ----------------
Downloads
53
Readme
->¿=> wild-proxy
rules based http/s proxy utilising wild-pare and nodejitsu's http-proxy
still in development, so there be dragons..
quickstart
npm i wild-proxy --save
as per the tests:
it('test the config options, does an end-to-end http proxy run, confirms we can prevent proxying by a step in the middle', function (done) {
this.timeout(25000);
var steps = {};
var http = require('http');
var server1 = http.createServer(function(req, res) {
var message = 'echo: ' + req.url + ', steps: ' + steps[req.url].join(',');
res.end(message);
});
var server2 = http.createServer(function(req, res) {
var message = 'echo: ' + req.url + ', steps: ' + steps[req.url].join(',');
res.end(message);
});
server1.listen(55554);
server2.listen(44443);
setTimeout(function(){
var __handleRequest1 = function (req, res, $happn, rule) {
return new Promise(function(resolve){
if (!steps[req.url]) steps[req.url] = [];
steps[req.url].push(rule.name);
return resolve();
})
};
var __handleRequest2 = function (req, res, $happn, rule) {
return new Promise(function(resolve){
if (!steps[req.url]) steps[req.url] = [];
steps[req.url].push(rule.name);
return resolve();
})
};
var __handleRequest21 = function (req, res, $happn, rule) {
return new Promise(function(resolve){
if (!steps[req.url]) steps[req.url] = [];
steps[req.url].push(rule.name);
return resolve();
})
};
var __handleBadRequest = function (req, res, $happn, rule) {
return new Promise(function(resolve){
if (!steps[req.url]) steps[req.url] = [];
steps[req.url].push(rule.name);
var message = 'bad: ' + req.url + ', steps: ' + steps[req.url].join(',');
res.end(message);
return resolve(true);
})
};
var __handleRequest22 = function (req, res, $happn, rule) {
return new Promise(function(resolve){
if (!steps[req.url]) steps[req.url] = [];
steps[req.url].push(rule.name);
return resolve();
})
};
var __handleRequest23 = function (req, res, $happn, rule) {
return new Promise(function(resolve){
if (!steps[req.url]) steps[req.url] = [];
steps[req.url].push(rule.name);
return resolve();
})
};
var listener1 = {
name: 'listener-1',
port: 55555,
protocol: 'http',
target: 'http://localhost:55554',
rule: 'rules-1'
};
var listener2 = {
name: 'listener-2',
port: 44444,
protocol: 'http',
target: 'http://localhost:44443',
rule: 'rules-2'
};
var wildProxyConfig = {
listeners: [listener1, listener2],
rules: [
{
name: 'rules-1',
path: '*',
handler: __handleRequest1.bind(__handleRequest1),
terminate: true
},
{
name: 'rules-2',
steps: [
{
name: 'rules-20',
path: '/auth?*',
handler: __handleRequest2.bind(__handleRequest2),
terminate: true
},
{
name: 'rules-21',
path: '/auth*',
handler: __handleRequest21.bind(__handleRequest21)
},
{
name: 'rules-22',
path: '/dashboards?*',
handler: __handleRequest22.bind(__handleRequest22),
terminate: true
},
{
name: 'rules-bad',
path: '*',
handler: __handleBadRequest.bind(__handleBadRequest)
},
{
name: 'rules-23',
path: '/app/kibana*',
handler: __handleRequest23.bind(__handleRequest23),
terminate: true
}
]
}
]
};
var wildProxy = require('..').create(wildProxyConfig);
var randomString = testUtilities.string();
wildProxy.listen()
.then(function(){
return testUtilities.doRequest('http', '127.0.0.1', 55555, '/' + randomString, null);
})
.then(function(response){
expect(response.body.toString()).to.be('echo: /' + randomString + ', steps: rules-1');
return testUtilities.doRequest('http', '127.0.0.1', 44444, '/auth?' + randomString, null);
})
.then(function(response){
expect(response.body.toString()).to.be('echo: /auth?' + randomString + ', steps: rules-20');
return testUtilities.doRequest('http', '127.0.0.1', 44444, '/dashboards?' + randomString, null);
})
.then(function(response){
expect(response.body.toString()).to.be('echo: /dashboards?' + randomString + ', steps: rules-22');
return testUtilities.doRequest('http', '127.0.0.1', 44444, '/app/kibana/' + randomString, null);
})
.then(function(response){
expect(response.body.toString()).to.be('bad: /app/kibana/' + randomString + ', steps: rules-bad');
wildProxy.stop()
.then(function(){
server1.close();
server2.close();
setTimeout(done, 1000);
}).catch(done);
})
.catch(done);
}, 2000);
});
supported node versions:
v0.10 - v8