Skip to content
This repository has been archived by the owner on Jul 21, 2023. It is now read-only.

feat: is multiaddr private and loopback #10

Merged
merged 5 commits into from
Oct 7, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,18 @@
},
"homepage": "https://github.com/libp2p/js-libp2p-utils#readme",
"devDependencies": {
"aegir": "^25.0.0",
"aegir": "^26.0.0",
"it-pair": "^1.0.0",
"it-pipe": "^1.1.0",
"streaming-iterables": "^5.0.2"
"streaming-iterables": "^5.0.3"
},
"dependencies": {
"abortable-iterator": "^3.0.0",
"debug": "^4.1.1",
"debug": "^4.2.0",
"err-code": "^2.0.3",
"ip-address": "^6.1.0",
"multiaddr": "^8.0.0"
"multiaddr": "^8.0.0",
"private-ip": "^1.0.5"
},
"contributors": [
"Vasco Santos <vasco.santos@moxy.studio>",
Expand Down
9 changes: 9 additions & 0 deletions src/is-multiaddr-private.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict'

const isIpPrivate = require('private-ip')

module.exports = (multiaddr) => {
jacobheun marked this conversation as resolved.
Show resolved Hide resolved
const { address } = multiaddr.nodeAddress()

return isIpPrivate(address)
}
51 changes: 51 additions & 0 deletions test/is-multiaddr-private.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/* eslint-env mocha */
'use strict'

const { expect } = require('aegir/utils/chai')
const multiaddr = require('multiaddr')

const isMultiaddrPrivate = require('../src/is-multiaddr-private')

describe('isMultiaddrPrivate', () => {
it('identifies private ip4 multiaddrs', () => {
const m1 = multiaddr('/ip4/127.0.0.1/tcp/1000')
const m2 = multiaddr('/ip4/10.0.0.1/tcp/1000')
const m3 = multiaddr('/ip4/192.168.0.1/tcp/1000')
const m4 = multiaddr('/ip4/172.16.0.1/tcp/1000')
jacobheun marked this conversation as resolved.
Show resolved Hide resolved

expect(isMultiaddrPrivate(m1)).to.eql(true)
expect(isMultiaddrPrivate(m2)).to.eql(true)
expect(isMultiaddrPrivate(m3)).to.eql(true)
expect(isMultiaddrPrivate(m4)).to.eql(true)
})

it('identifies public ip4 multiaddrs', () => {
const m1 = multiaddr('/ip4/101.0.26.90/tcp/1000')
const m2 = multiaddr('/ip4/40.1.20.9/tcp/1000')
const m3 = multiaddr('/ip4/92.168.0.1/tcp/1000')
const m4 = multiaddr('/ip4/2.16.0.1/tcp/1000')

expect(isMultiaddrPrivate(m1)).to.eql(false)
expect(isMultiaddrPrivate(m2)).to.eql(false)
expect(isMultiaddrPrivate(m3)).to.eql(false)
expect(isMultiaddrPrivate(m4)).to.eql(false)
})

it('identifies private ip6 multiaddrs', () => {
const m1 = multiaddr('/ip6/fd52:8342:fc46:6c91:3ac9:86ff:fe31:7095/tcp/1000')

expect(isMultiaddrPrivate(m1)).to.eql(true)
})

it('identifies public ip6 multiaddrs', () => {
const m1 = multiaddr('/ip6/2001:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/1000')

expect(isMultiaddrPrivate(m1)).to.eql(false)
})

it('identifies dns multiaddrs as not private', () => {
const m1 = multiaddr('/dns4/wss0.bootstrap.libp2p.io/tcp/443')

expect(isMultiaddrPrivate(m1)).to.eql(false)
})
})