wild-proxy

4.0.4 • Public • Published

->¿=> 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

Readme

Keywords

none

Package Sidebar

Install

npm i wild-proxy

Weekly Downloads

31

Version

4.0.4

License

none

Unpacked Size

47.7 kB

Total Files

9

Last publish

Collaborators

  • smc-tenacious