UNPKG

ip-restrictor

Version:

Easily allow or block internal IPs in Node.js and Express apps. A simple middleware for IP filtering and network security.

113 lines (85 loc) โ€ข 4.29 kB
# IP Restrictor Easily allow or block internal IPs in Node.js and Express apps. A simple middleware for IP filtering and network security. [![npm](https://img.shields.io/npm/v/ip-restrictor.svg)](https://www.npmjs.com/package/ip-restrictor) [![License](https://img.shields.io/npm/l/ip-restrictor.svg)](LICENSE) # ๐Ÿ“ฆ Installation Install via npm ```sh npm i ip-restrictor ``` Install via yarn ```sh yarn add ip-restrictor ``` # ๐Ÿš€ Usage **Express Middleware** ```js const express = require("express"); const { allowOnly, blockOnly, isInternalIP, getClientIP } = require("ip-restrictor"); const app = express(); // Only allow specific internal IPs app.use((req, res, next) => { const clientIP = getClientIP(req); console.log(`Checking allowOnly middleware for IP: ${clientIP}`); next(); // Call the original allowOnly middleware }, allowOnly(["192.168.1.100", "10.0.0.5"])); // Block specific internal IPs app.use((req, res, next) => { const clientIP = getClientIP(req); console.log(`Checking blockOnly middleware for IP: ${clientIP}`); next(); // Call the original blockOnly middleware }, blockOnly(["192.168.1.200"])); app.get("/", (req, res) => { const clientIP = getClientIP(req); res.send(`Your IP: ${clientIP} - Internal: ${isInternalIP(clientIP)}`); }); app.listen(3000, () => console.log("Server running on port 3000")); ``` **Standalone Usage (Without Express)** ```js const { allowOnlyStandalone, blockOnlyStandalone } = require("ip-restrictor"); const myIP = "192.168.1.100"; if (allowOnlyStandalone(["192.168.1.100"], myIP)) { console.log("Access granted."); } else { console.log("Access denied."); } if (blockOnlyStandalone(["192.168.1.200"], myIP)) { console.log("Not blocked, you may proceed."); } else { console.log("You are blocked."); } ``` **Standalone Usage (Without Express) 2.0** ```js const { allowOnlyStandalone, blockOnlyStandalone } = require("ip-restrictor"); const testIPs = [ { allowed: ["192.168.1.100"], blocked: ["192.168.1.200"], myIP: "192.168.1.100" }, { allowed: ["192.168.1.101"], blocked: ["192.168.1.200"], myIP: "192.168.1.100" }, { allowed: [], blocked: ["192.168.1.100"], myIP: "192.168.1.100" }, { allowed: ["192.168.1.100"], blocked: [], myIP: "192.168.1.200" }, ]; testIPs.forEach(({ allowed, blocked, myIP }, index) => { console.log(`Test Case ${index + 1}`); console.log(`Allowed: ${allowed}, Blocked: ${blocked}, MyIP: ${myIP}`); console.log( allowOnlyStandalone(allowed, myIP) ? "Access granted." : "Access denied." ); console.log( blockOnlyStandalone(blocked, myIP) ? "Not blocked, you may proceed." : "You are blocked." ); console.log("-----"); }); ``` # ๐Ÿ“– API Reference | Function | Type | Parameters | Returns | Description | |-----------------------|-------------|----------------------------------|---------------|-----------------------------------------------------------------------------| | `allowOnly` | Middleware | `allowedIPs: string[]` | Express Middleware | Allows only specific IPs to access the server. Blocks all others. | | `blockOnly` | Middleware | `blockedIPs: string[]` | Express Middleware | Blocks specific IPs while allowing all others. | | `allowOnlyStandalone` | Function | `allowedIPs: string[], ip: string` | `true / false` | Returns `true` if `ip` is in `allowedIPs`, otherwise `false`. | | `blockOnlyStandalone` | Function | `blockedIPs: string[], ip: string` | `true / false` | Returns `false` if `ip` is in `blockedIPs`, otherwise `true`. | | `isInternalIP` | Function | `ip: string` | `true / false` | Checks if the given IP is part of a private/internal network. | | `getClientIP` | Function | `req: Request` | `string (IP)` | Extracts the clientโ€™s IP from an Express request object. |