Skip to content
This repository was archived by the owner on Apr 24, 2023. It is now read-only.

Commit dce5ff8

Browse files
Stevermandaviddias
authored andcommitted
fix: /dns4 multiaddr explicit tcp/port support (#130)
1 parent f9529d0 commit dce5ff8

File tree

2 files changed

+54
-12
lines changed

2 files changed

+54
-12
lines changed

src/utils.js

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,24 @@ const multiaddr = require('multiaddr')
44

55
function cleanUrlSIO (ma) {
66
const maStrSplit = ma.toString().split('/')
7+
const tcpProto = ma.protos()[1].name
8+
const wsProto = ma.protos()[2].name
9+
const tcpPort = ma.stringTuples()[1][1]
10+
11+
if (tcpProto !== 'tcp' || (wsProto !== 'ws' && wsProto !== 'wss')) {
12+
throw new Error('invalid multiaddr: ' + ma.toString())
13+
}
714

815
if (!multiaddr.isName(ma)) {
916
return 'http://' + maStrSplit[2] + ':' + maStrSplit[4]
10-
} else {
11-
const wsProto = ma.protos()[1].name
12-
13-
if (wsProto === 'ws') {
14-
return 'http://' + maStrSplit[2]
15-
} else if (wsProto === 'wss') {
16-
return 'https://' + maStrSplit[2]
17-
} else {
18-
throw new Error('invalid multiaddr' + ma.toString())
19-
}
17+
}
18+
19+
if (wsProto === 'ws') {
20+
return 'http://' + maStrSplit[2] + (tcpPort === 80 ? '' : ':' + tcpPort)
21+
}
22+
23+
if (wsProto === 'wss') {
24+
return 'https://' + maStrSplit[2] + (tcpPort === 443 ? '' : ':' + tcpPort)
2025
}
2126
}
2227

test/utils.spec.js

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,52 @@ const chai = require('chai')
66
const dirtyChai = require('dirty-chai')
77
const expect = chai.expect
88
chai.use(dirtyChai)
9+
const multiaddr = require('multiaddr')
910
const cleanMultiaddr = require('../src/utils').cleanMultiaddr
11+
const cleanUrlSIO = require('../src/utils').cleanUrlSIO
1012

1113
describe('utils', () => {
12-
const legacyMultiaddrStringDNS = '/libp2p-webrtc-star/dns4/star-signal.cloud.ipfs.team/wss/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
14+
const legacyMultiaddrStringDNS = '/libp2p-webrtc-star/dns4/star-signal.cloud.ipfs.team/tcp/443/wss/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
1315
const legacyMultiaddrStringIP = '/libp2p-webrtc-star/ip4/127.0.0.1/tcp/1212/wss/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
1416

15-
const modernMultiaddrStringDNS = '/dns4/star-signal.cloud.ipfs.team/wss/p2p-webrtc-star/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
17+
const modernMultiaddrStringDNS = '/dns4/star-signal.cloud.ipfs.team/tcp/443/wss/p2p-webrtc-star/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
1618
const modernMultiaddrStringIP = '/ip4/127.0.0.1/tcp/1212/wss/p2p-webrtc-star/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
1719

20+
const modernMultiaddrStringDNS2 = '/dns4/star-signal.cloud.ipfs.team/tcp/9999/wss/p2p-webrtc-star/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
21+
const modernMultiaddrStringDNS3 = '/dns4/star-signal.cloud.ipfs.team/tcp/80/ws/p2p-webrtc-star/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
22+
const modernMultiaddrStringDNS4 = '/dns4/star-signal.cloud.ipfs.team/tcp/8080/ws/p2p-webrtc-star/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
23+
24+
const invalidMultiaddrStringDNS = '/dns4/star-signal.cloud.ipfs.team/udp/8080/wss/p2p-webrtc-star/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
25+
const invalidMultiaddrStringDNS2 = '/dns4/star-signal.cloud.ipfs.team/tcp/8080/p2p-webrtc-star/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
26+
const invalidMultiaddrStringDNS3 = '/dns4/star-signal.cloud.ipfs.team/ws/p2p-webrtc-star/ipfs/QmWxLfixekyv6GAzvDEtXfXjj7gb1z3G8i5aQNHLhw1zA1'
27+
28+
// Create actual multiaddrs
29+
const modernMultiaddrDNS = multiaddr(modernMultiaddrStringDNS)
30+
const modernMultiaddrDNS2 = multiaddr(modernMultiaddrStringDNS2)
31+
const modernMultiaddrDNS3 = multiaddr(modernMultiaddrStringDNS3)
32+
const modernMultiaddrDNS4 = multiaddr(modernMultiaddrStringDNS4)
33+
34+
const invalidMultiaddrDNS = multiaddr(invalidMultiaddrStringDNS)
35+
const invalidMultiaddrDNS2 = multiaddr(invalidMultiaddrStringDNS2)
36+
const invalidMultiaddrDNS3 = multiaddr(invalidMultiaddrStringDNS3)
37+
38+
it('cleanUrlSIO webrtc-star modern', () => {
39+
const newUrlSIOStringDNS = cleanUrlSIO(modernMultiaddrDNS)
40+
const newUrlSIOStringDNS2 = cleanUrlSIO(modernMultiaddrDNS2)
41+
const newUrlSIOStringDNS3 = cleanUrlSIO(modernMultiaddrDNS3)
42+
const newUrlSIOStringDNS4 = cleanUrlSIO(modernMultiaddrDNS4)
43+
44+
expect(() => cleanUrlSIO(modernMultiaddrDNS)).to.not.throw()
45+
expect(() => cleanUrlSIO(invalidMultiaddrDNS)).to.throw(Error, 'invalid multiaddr')
46+
expect(() => cleanUrlSIO(invalidMultiaddrDNS2)).to.throw(Error, 'invalid multiaddr')
47+
expect(() => cleanUrlSIO(invalidMultiaddrDNS3)).to.throw(Error, 'invalid multiaddr')
48+
49+
expect(newUrlSIOStringDNS).to.equal('https://star-signal.cloud.ipfs.team')
50+
expect(newUrlSIOStringDNS2).to.equal('https://star-signal.cloud.ipfs.team:9999')
51+
expect(newUrlSIOStringDNS3).to.equal('http://star-signal.cloud.ipfs.team')
52+
expect(newUrlSIOStringDNS4).to.equal('http://star-signal.cloud.ipfs.team:8080')
53+
})
54+
1855
it('cleanMultiaddr webrtc-star legacy', () => {
1956
const newMultiaddrStringDNS = cleanMultiaddr(legacyMultiaddrStringDNS)
2057
const newMultiaddrStringIP = cleanMultiaddr(legacyMultiaddrStringIP)

0 commit comments

Comments
 (0)