net: allow net.BlockList to use net.SocketAddress objects · nodejs/node@0709cbb

@@ -8,14 +8,17 @@ const {

8899

const {

1010

BlockList: BlockListHandle,

11-

AF_INET,

12-

AF_INET6,

1311

} = internalBinding('block_list');

14121513

const {

1614

customInspectSymbol: kInspect,

1715

} = require('internal/util');

181617+

const {

18+

SocketAddress,

19+

kHandle: kSocketAddressHandle,

20+

} = require('internal/socketaddress');

21+1922

const {

2023

JSTransferable,

2124

kClone,

@@ -55,56 +58,76 @@ class BlockList extends JSTransferable {

5558

}

56595760

addAddress(address, family = 'ipv4') {

58-

validateString(address, 'address');

59-

validateString(family, 'family');

60-

family = family.toLowerCase();

61-

if (family !== 'ipv4' && family !== 'ipv6')

62-

throw new ERR_INVALID_ARG_VALUE('family', family);

63-

const type = family === 'ipv4' ? AF_INET : AF_INET6;

64-

this[kHandle].addAddress(address, type);

61+

if (!SocketAddress.isSocketAddress(address)) {

62+

validateString(address, 'address');

63+

validateString(family, 'family');

64+

address = new SocketAddress({

65+

address,

66+

family,

67+

});

68+

}

69+

this[kHandle].addAddress(address[kSocketAddressHandle]);

6570

}

66716772

addRange(start, end, family = 'ipv4') {

68-

validateString(start, 'start');

69-

validateString(end, 'end');

70-

validateString(family, 'family');

71-

family = family.toLowerCase();

72-

if (family !== 'ipv4' && family !== 'ipv6')

73-

throw new ERR_INVALID_ARG_VALUE('family', family);

74-

const type = family === 'ipv4' ? AF_INET : AF_INET6;

75-

const ret = this[kHandle].addRange(start, end, type);

73+

if (!SocketAddress.isSocketAddress(start)) {

74+

validateString(start, 'start');

75+

validateString(family, 'family');

76+

start = new SocketAddress({

77+

address: start,

78+

family,

79+

});

80+

}

81+

if (!SocketAddress.isSocketAddress(end)) {

82+

validateString(end, 'end');

83+

validateString(family, 'family');

84+

end = new SocketAddress({

85+

address: end,

86+

family,

87+

});

88+

}

89+

const ret = this[kHandle].addRange(

90+

start[kSocketAddressHandle],

91+

end[kSocketAddressHandle]);

7692

if (ret === false)

7793

throw new ERR_INVALID_ARG_VALUE('start', start, 'must come before end');

7894

}

79958096

addSubnet(network, prefix, family = 'ipv4') {

81-

validateString(network, 'network');

82-

validateString(family, 'family');

83-

family = family.toLowerCase();

84-

let type;

85-

switch (family) {

97+

if (!SocketAddress.isSocketAddress(network)) {

98+

validateString(network, 'network');

99+

validateString(family, 'family');

100+

network = new SocketAddress({

101+

address: network,

102+

family,

103+

});

104+

}

105+

switch (network.family) {

86106

case 'ipv4':

87-

type = AF_INET;

88107

validateInt32(prefix, 'prefix', 0, 32);

89108

break;

90109

case 'ipv6':

91-

type = AF_INET6;

92110

validateInt32(prefix, 'prefix', 0, 128);

93111

break;

94-

default:

95-

throw new ERR_INVALID_ARG_VALUE('family', family);

96112

}

97-

this[kHandle].addSubnet(network, type, prefix);

113+

this[kHandle].addSubnet(network[kSocketAddressHandle], prefix);

98114

}

99115100116

check(address, family = 'ipv4') {

101-

validateString(address, 'address');

102-

validateString(family, 'family');

103-

family = family.toLowerCase();

104-

if (family !== 'ipv4' && family !== 'ipv6')

105-

throw new ERR_INVALID_ARG_VALUE('family', family);

106-

const type = family === 'ipv4' ? AF_INET : AF_INET6;

107-

return Boolean(this[kHandle].check(address, type));

117+

if (!SocketAddress.isSocketAddress(address)) {

118+

validateString(address, 'address');

119+

validateString(family, 'family');

120+

try {

121+

address = new SocketAddress({

122+

address,

123+

family,

124+

});

125+

} catch {

126+

// Ignore the error. If it's not a valid address, return false.

127+

return false;

128+

}

129+

}

130+

return Boolean(this[kHandle].check(address[kSocketAddressHandle]));

108131

}

109132110133

get rules() {