mirror of
https://github.com/fluencelabs/js-libp2p-utils
synced 2025-04-25 12:52:34 +00:00
feat: is multiaddr private and loopback (#10)
This commit is contained in:
parent
03e272cd24
commit
d7fa562d91
54
README.md
54
README.md
@ -38,6 +38,60 @@ const ipAndPortToMultiaddr = require('libp2p-utils/src/ip-port-to-multiaddr')
|
|||||||
const ma = ipAndPortToMultiaddr('127.0.0.1', 9000)
|
const ma = ipAndPortToMultiaddr('127.0.0.1', 9000)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### multiaddr `.isLoopback(ma)`
|
||||||
|
|
||||||
|
Check if a given multiaddr is a loopback address.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|------|------|-------------|
|
||||||
|
| ma | `Multiaddr` | multiaddr to verify |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Type | Description |
|
||||||
|
|------|-------------|
|
||||||
|
| `boolean` | returns true if multiaddr is a loopback address, false otherwise |
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
```js
|
||||||
|
const multiaddr = require('multiaddr')
|
||||||
|
const isLoopback = require('libp2p-utils/src/multiaddr/is-loopback')
|
||||||
|
|
||||||
|
const ma = multiaddr('/ip4/127.0.0.1/tcp/1000')
|
||||||
|
isMultiaddrLoopbackAddrs = isLoopback(ma)
|
||||||
|
```
|
||||||
|
|
||||||
|
### multiaddr `.isPrivate(ma)`
|
||||||
|
|
||||||
|
Check if a given multiaddr has a private address.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
| Name | Type | Description |
|
||||||
|
|------|------|-------------|
|
||||||
|
| ma | `Multiaddr` | multiaddr to verify |
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
| Type | Description |
|
||||||
|
|------|-------------|
|
||||||
|
| `boolean` | returns true if multiaddr is a private address, false otherwise |
|
||||||
|
|
||||||
|
#### Example
|
||||||
|
|
||||||
|
```js
|
||||||
|
const multiaddr = require('multiaddr')
|
||||||
|
const isPrivate = require('libp2p-utils/src/multiaddr/is-private')
|
||||||
|
|
||||||
|
const ma = multiaddr('/ip4/10.0.0.1/tcp/1000')
|
||||||
|
isMultiaddrPrivateAddrs = isPrivate(ma)
|
||||||
|
```
|
||||||
|
|
||||||
## Contribute
|
## Contribute
|
||||||
|
|
||||||
Contributions welcome. Please check out [the issues](https://github.com/libp2p/js-libp2p-utils/issues).
|
Contributions welcome. Please check out [the issues](https://github.com/libp2p/js-libp2p-utils/issues).
|
||||||
|
10
package.json
10
package.json
@ -29,17 +29,19 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/libp2p/js-libp2p-utils#readme",
|
"homepage": "https://github.com/libp2p/js-libp2p-utils#readme",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"aegir": "^25.0.0",
|
"aegir": "^27.0.0",
|
||||||
"it-pair": "^1.0.0",
|
"it-pair": "^1.0.0",
|
||||||
"it-pipe": "^1.1.0",
|
"it-pipe": "^1.1.0",
|
||||||
"streaming-iterables": "^5.0.2"
|
"streaming-iterables": "^5.0.3"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"abortable-iterator": "^3.0.0",
|
"abortable-iterator": "^3.0.0",
|
||||||
"debug": "^4.1.1",
|
"debug": "^4.2.0",
|
||||||
"err-code": "^2.0.3",
|
"err-code": "^2.0.3",
|
||||||
"ip-address": "^6.1.0",
|
"ip-address": "^6.1.0",
|
||||||
"multiaddr": "^8.0.0"
|
"is-loopback-addr": "^1.0.0",
|
||||||
|
"multiaddr": "^8.0.0",
|
||||||
|
"private-ip": "^1.0.5"
|
||||||
},
|
},
|
||||||
"contributors": [
|
"contributors": [
|
||||||
"Vasco Santos <vasco.santos@moxy.studio>",
|
"Vasco Santos <vasco.santos@moxy.studio>",
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
/**
|
/**
|
||||||
* Verify if two arrays of non primitive types with the "equals" function are equal.
|
* Verify if two arrays of non primitive types with the "equals" function are equal.
|
||||||
* Compatible with multiaddr, peer-id and Buffer.
|
* Compatible with multiaddr, peer-id and Buffer.
|
||||||
|
*
|
||||||
* @param {Array<*>} a
|
* @param {Array<*>} a
|
||||||
* @param {Array<*>} b
|
* @param {Array<*>} b
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
|
17
src/multiaddr/is-loopback.js
Normal file
17
src/multiaddr/is-loopback.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const isLoopbackAddr = require('is-loopback-addr')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a given multiaddr is a loopback address.
|
||||||
|
*
|
||||||
|
* @param {Multiaddr} ma
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
function isLoopback (ma) {
|
||||||
|
const { address } = ma.nodeAddress()
|
||||||
|
|
||||||
|
return isLoopbackAddr(address)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = isLoopback
|
17
src/multiaddr/is-private.js
Normal file
17
src/multiaddr/is-private.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const isIpPrivate = require('private-ip')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a given multiaddr has a private address.
|
||||||
|
*
|
||||||
|
* @param {Multiaddr} ma
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
function isPrivate (ma) {
|
||||||
|
const { address } = ma.nodeAddress()
|
||||||
|
|
||||||
|
return isIpPrivate(address)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = isPrivate
|
57
test/multiaddr/is-loopback.spec.js
Normal file
57
test/multiaddr/is-loopback.spec.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/* eslint-env mocha */
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const { expect } = require('aegir/utils/chai')
|
||||||
|
const multiaddr = require('multiaddr')
|
||||||
|
|
||||||
|
const isLoopback = require('../../src/multiaddr/is-loopback')
|
||||||
|
|
||||||
|
describe('multiaddr isLoopback', () => {
|
||||||
|
it('identifies loopback ip4 multiaddrs', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/ip4/127.0.0.1/tcp/1000'),
|
||||||
|
multiaddr('/ip4/127.0.1.1/tcp/1000'),
|
||||||
|
multiaddr('/ip4/127.1.1.1/tcp/1000'),
|
||||||
|
multiaddr('/ip4/127.255.255.255/tcp/1000')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isLoopback(ma)).to.eql(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('identifies non loopback ip4 multiaddrs', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/ip4/101.0.26.90/tcp/1000'),
|
||||||
|
multiaddr('/ip4/10.0.0.1/tcp/1000'),
|
||||||
|
multiaddr('/ip4/192.168.0.1/tcp/1000'),
|
||||||
|
multiaddr('/ip4/172.16.0.1/tcp/1000')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isLoopback(ma)).to.eql(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('identifies loopback ip6 multiaddrs', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/ip6/::1/tcp/1000')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isLoopback(ma)).to.eql(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('identifies non loopback ip6 multiaddrs', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/ip6/2001:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/1000'),
|
||||||
|
multiaddr('/ip6/::/tcp/1000')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isLoopback(ma)).to.eql(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('identifies other multiaddrs as not loopback addresses', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/dns4/wss0.bootstrap.libp2p.io/tcp/443'),
|
||||||
|
multiaddr('/dns6/wss0.bootstrap.libp2p.io/tcp/443')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isLoopback(ma)).to.eql(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
58
test/multiaddr/is-private.spec.js
Normal file
58
test/multiaddr/is-private.spec.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/* eslint-env mocha */
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
const { expect } = require('aegir/utils/chai')
|
||||||
|
const multiaddr = require('multiaddr')
|
||||||
|
|
||||||
|
const isPrivate = require('../../src/multiaddr/is-private')
|
||||||
|
|
||||||
|
describe('multiaddr isPrivate', () => {
|
||||||
|
it('identifies private ip4 multiaddrs', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/ip4/127.0.0.1/tcp/1000'),
|
||||||
|
multiaddr('/ip4/10.0.0.1/tcp/1000'),
|
||||||
|
multiaddr('/ip4/192.168.0.1/tcp/1000'),
|
||||||
|
multiaddr('/ip4/172.16.0.1/tcp/1000')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isPrivate(ma)).to.eql(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('identifies public ip4 multiaddrs', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/ip4/101.0.26.90/tcp/1000'),
|
||||||
|
multiaddr('/ip4/40.1.20.9/tcp/1000'),
|
||||||
|
multiaddr('/ip4/92.168.0.1/tcp/1000'),
|
||||||
|
multiaddr('/ip4/2.16.0.1/tcp/1000')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isPrivate(ma)).to.eql(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('identifies private ip6 multiaddrs', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/ip6/fd52:8342:fc46:6c91:3ac9:86ff:fe31:7095/tcp/1000'),
|
||||||
|
multiaddr('/ip6/fd52:8342:fc46:6c91:3ac9:86ff:fe31:1/tcp/1000')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isPrivate(ma)).to.eql(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('identifies public ip6 multiaddrs', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/ip6/2001:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/1000'),
|
||||||
|
multiaddr('/ip6/2000:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/1000')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isPrivate(ma)).to.eql(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('identifies other multiaddrs as not private addresses', () => {
|
||||||
|
[
|
||||||
|
multiaddr('/dns4/wss0.bootstrap.libp2p.io/tcp/443'),
|
||||||
|
multiaddr('/dns6/wss0.bootstrap.libp2p.io/tcp/443')
|
||||||
|
].forEach(ma => {
|
||||||
|
expect(isPrivate(ma)).to.eql(false)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
Loading…
x
Reference in New Issue
Block a user