Code Monkey home page Code Monkey logo

koa-ip-filter's Introduction

Middleware for koa that filters IPs against glob patterns, RegExp, string or array of globs. Support custom 403 Forbidden message and custom ID.

code climate standard code style travis build status coverage status dependency status

Install

npm i koa-ip-filter --save

Features

  • custom message when 403 Forbidden response, through opts.forbidden
  • custom identifier different than default this.ip, through opts.id
    • you may want to add opts.strict: false if it's not IP
  • filter IP using glob patterns, regexp, string, array or function
  • blacklist with negative glob patterns, whitelist with positive
  • would restrict all to 403 Forbidden that not match to filter

Notice: In the next middleware you will have this.filter method which is ip-filter and this.identifier - the IP/ID that passed the given filter

Usage

For more use-cases see the tests

const koaIpFilter = require('koa-ip-filter')

Filtering incoming request with glob patterns array, regexp, string or matcher function

Params

  • options {Object}
    • id {Function}: custom identifier, defaults to this.ip
    • strict {Boolean}: to throw when not valid IPv4/IPv6? default true
    • filter {Array|String|RegExp|Function}: black/white list filter
    • forbidden {String|Function}: custom message when 403 Forbidden response
  • returns {GeneratorFunction}

Example

'use strict'

var koa = require('koa')
var ipFilter = require('koa-ip-filter')
var helloWorld = require('koa-hello-world')

var app = koa()

app
.use(ipFilter({
  forbidden: '403: Get out of here!',
  filter: ['127.??.6*.12', '!1.2.*.4']
}))
.use(helloWorld())

app.listen(1234)
console.log('koa server start listening on http://localhost:1234')

// if your IP is `127.43.65.12` you will see `Hello World`
// otherwise you will see `403: Get out of here!`

One more example

If you want to allow all IPs, but want to restrict only some range

'use strict'

var koa = require('koa')
var ipFilter = require('koa-ip-filter')
var helloWorld = require('koa-hello-world')

var app = koa()

app
.use(ipFilter({
  forbidden: '403: Get out of here!',
  filter: ['*', '!213.15.*']
}))
.use(helloWorld())

app.listen(1234)
console.log('koa server start listening on http://localhost:1234')

// only user with IP starting with `213.15.*` 
// will see the message `403: Get out of here!`

Related

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
But before doing anything, please read the CONTRIBUTING.md guidelines.

tunnckoCore.tk keybase tunnckoCore tunnckoCore npm tunnckoCore twitter tunnckoCore github

koa-ip-filter's People

Contributors

tunnckocore avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

crobinson42

koa-ip-filter's Issues

Support Koa v2

Koa v2 warning:

Support for generators will be removed in v3. See the documentation for examples of how to convert old middleware https://github.com/koajs/koa/blob/master/docs/migration.md

upcoming v2

  • remove opts.blacklist and opts.whiteslist, instead use opts.filter
  • negative glob patterns now are blacklist, positive whitelist
  • add strict mode (by default true, checking valid ip), should set to false if use opts.id
  • update features list
  • documentation and changes
  • usage example
  • and example.js file

you can see 0cb8c57

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.