@heroku-cli/plugin-spaces
Version:
Heroku plugin to manage Heroku Private Spaces
101 lines (86 loc) • 2.51 kB
JavaScript
'use strict'
let cli = require('heroku-cli-util')
module.exports = function (heroku) {
function getOutboundRules(space) {
return heroku.request({
path: `/spaces/${space}/outbound-ruleset`,
headers: {Accept: 'application/vnd.heroku+json; version=3.dogwood'},
})
}
function putOutboundRules(space, ruleset) {
return heroku.request({
method: 'PUT',
path: `/spaces/${space}/outbound-ruleset`,
body: ruleset,
headers: {Accept: 'application/vnd.heroku+json; version=3.dogwood'},
})
}
function displayRules(space, ruleset) {
if (ruleset.rules.length > 0) {
cli.styledHeader('Outbound Rules')
display(ruleset.rules)
} else {
cli.styledHeader(`${space} has no Outbound Rules. Your Dynos cannot communicate with hosts outside of ${space}.`)
}
}
function lined(rules) {
var lined = []
for (var i = 0, len = rules.length; i < len; i++) {
lined.push({
line: i + 1,
target: rules[i].target,
from_port: rules[i].from_port,
to_port: rules[i].to_port,
protocol: rules[i].protocol,
})
}
return lined
}
function display(rules) {
var f = function (p) {
var n = p
return n.toString()
}
cli.table(lined(rules), {
columns: [
{key: 'line', label: 'Rule Number'},
{key: 'target', label: 'Destination'},
{key: 'from_port', label: 'From Port', format: fromPort => f(fromPort)},
{key: 'to_port', label: 'To Port', format: toPort => f(toPort)},
{key: 'protocol', label: 'Protocol'},
],
})
}
function parsePorts(proto, p) {
if (p === '-1' || p === 'any') {
if (proto === 'icmp') {
return [0, 255]
}
return [0, 65535]
}
var actual = []
// eslint-disable-next-line no-eq-null, eqeqeq
if (p != null) {
var ports = p.split('-')
if (ports.length === 2) {
// eslint-disable-next-line unicorn/prefer-math-trunc
actual = [ports[0] | 0, ports[1] | 0]
} else if (ports.length === 1) {
// eslint-disable-next-line unicorn/prefer-math-trunc
actual = [ports[0] | 0, ports[0] | 0]
} else {
throw new Error('Specified --port range seems incorrect.')
}
}
if (actual.length !== 2) {
throw new Error('Specified --port range seems incorrect.')
}
return actual
}
return {
getOutboundRules,
putOutboundRules,
displayRules,
parsePorts,
}
}