Skip to content

Commit

Permalink
fix: fix mapping ipv6-based port mappings
Browse files Browse the repository at this point in the history
  • Loading branch information
Steveb-p authored and AlexZeitler committed May 11, 2021
1 parent 48c9f08 commit 21b63cb
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 21 deletions.
47 changes: 28 additions & 19 deletions src/port-mapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,35 @@ const mapPorts = (
mapped?: { address: string; port: number }
exposed: { port: number; protocol: string }
}> => {
const result = !ports
? []
: (() => {
return ports.split(',').map((untypedPort) => {
const exposedFragments = untypedPort.trim().split('->')
if (!ports) {
return []
}

const [port, protocol] =
exposedFragments.length === 1
? exposedFragments[0].split('/')
: exposedFragments[1].split('/')
const [address, mappedPort] =
exposedFragments.length === 2 ? exposedFragments[0].split(':') : []
return {
exposed: { port: Number(port), protocol },
...(address &&
mappedPort && { mapped: { port: Number(mappedPort), address } })
}
})
})()
return result
return ports.split(',').map((untypedPort) => {
const exposedFragments = untypedPort.trim().split('->')

const [port, protocol] =
exposedFragments.length === 1
? exposedFragments[0].split('/')
: exposedFragments[1].split('/')

const mapped = exposedFragments[0]
const lastDoubleColon = mapped.lastIndexOf(':')

if (lastDoubleColon === -1) {
return {
exposed: { port: Number(port), protocol },
}
}

const address = mapped.substr(0, lastDoubleColon)
const mappedPort = mapped.substr(lastDoubleColon + 1)

return {
exposed: { port: Number(port), protocol },
mapped: { port: Number(mappedPort), address },
}
})
}

export default mapPorts
4 changes: 2 additions & 2 deletions test/port-mapper.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ test('map multiple tcp ports exposed on ipv4 and ipv6 interfaces', () => {
},
{
exposed: { port: 443, protocol: 'tcp' },
mapped: { address: ':::', port: 443 }
mapped: { address: '::', port: 443 }
},
{
exposed: { port: 80, protocol: 'tcp' },
mapped: { address: '0.0.0.0', port: 80 }
},
{
exposed: { port: 80, protocol: 'tcp' },
mapped: { address: ':::', port: 80 }
mapped: { address: '::', port: 80 }
}
])
})

0 comments on commit 21b63cb

Please sign in to comment.