Giter VIP home page Giter VIP logo

hapi-bouncer's Introduction

hapi-bouncer

Transaprent proxy. Pipe raw http traffic from incoming http requests to remote endpoints.

Proxy like substack bouncy, but builded on top of hapi.

  • Supports https, and configurations via node-config-loader
  • Can be used as hapi plugin.
  • Can log requests/responses and payloads.
  • Can partially substitute resources by path: you can mount many resources to one endpoint.

Example:

site1.com is localhost 127.0.0.1

site2.com is external host.

Requests (https or http):

Install:

npm i -g hapi-bouncer

Configuration:

All files placed in ./conf directory:

#_base#default-server.yml

host: 0.0.0.0
__push__: [connections]

If push directive exists: concat connections data from all config files in ./conf directory.

# ex2#default-server.yml

connections:
    -
        # Proxy for http and https:
        from: https?://site1.example.com
        to: http://localhost:8080
# ex1#default-server.yml

connections:
    -
        from: https?://site1.com
        to: http://localhost:8007
    -
        from: https?://site1.com/rest
        to: http://localhost:8008/rest-some
    -
        from: https?://site1.com/some
        to: http://site2.com/some
    -
        from: https?://site1.com/sso
        to: http://localhost:8008/sso
    -
        from: https?://site1.com/cas
        to: http://localhost:8008/cas
; /etc/hosts

site1.com 127.0.0.1

SSL certificates:

ssl/server.crt
ssl/server.key
ssl/ca.crt

Running as server:

hapi-bouncer --config=conf --certs=ssl --verbose

Hapi plugin

import {ParsedUrl, proxyHapiPlugin} from 'hapi-bouncer'
import type {Link, ProxyHapiPluginOptions} from 'hapi-bouncer'

const links: Link[] = [
    {from: new ParsedUrl('http?://site1.com/rest'), to: new ParsedUrl('http://extsite.com/api')}
]

const proxyHapiPluginWithOptions = {
    register: proxyHapiPlugin,
    options: {links}
}
server.register([Inert, h2o2, proxyHapiPluginWithOptions], (err: ?Error) => {
    if (err) {
        console.error(err)
        process.exit(1)
    }
})

Interfaces

// @flow

export interface TlsRec {
    key?: ?string;
    cert?: ?string;
    ca?: ?string;
    requestCert?: ?boolean;
    rejectUnauthorized?: ?boolean;
}

export interface RawConnection {
    from: string;
    to: string;
}

export interface RawConfig {
    host?: string;
    tls: TlsRec;
    connections: RawConnection[];
}

export interface Link {
    from: ParsedUrl;
    to: ParsedUrl;
}

export interface ProxyHapiPluginOptions {
    links: Link[];
    createHandler?: (link: Link) => HapiHandler;
    sanitizeCookie?: (cookie: string) => string;
}

hapi-bouncer's People

Contributors

zerkalica avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.