From 5eee522a4cb4c480a2e74de2cb74a6da06e47657 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Fri, 4 Mar 2022 15:19:28 +0500 Subject: switch from ipaddr.js to ip-address --- assets/js/main.js | 23 ++++++++++++++--------- index.html | 9 ++++++++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/assets/js/main.js b/assets/js/main.js index 50f7336..89551da 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -33,43 +33,48 @@ function parse_key(val) { return val; } +var ip_address_lib = require('ip-address'); + function parse_ip(src, parser) { src = src.trim(); if (src.length == 0) throw new Error('IP address cannot be an empty string.'); try { - var result = parser.parseCIDR(src); + var result = new parser(src); } catch (err) { throw new Error('Sorry, IP address validation failed with the following error:\n' + err.message); } - var addr = result[0].toString(); - var netmask = result[1]; - var network_id = parser.networkAddressFromCIDR(src); + if (!result.parsedSubnet) + throw new Error('Please specify address using the CIDR format (including the netmask).'); + + var addr = result.correctForm(); + var netmask = result.subnetMask; + var network_id = result.startAddress().correctForm(); return [addr, netmask, network_id]; } function parse_ipv4(src) { - var parser = ipaddr.IPv4; + var parser = ip_address_lib.Address4; var result = parse_ip(src, parser); var addr = result[0]; var netmask = result[1]; var network_id = result[2]; + var broadcast_addr = new parser(src).endAddress().correctForm(); - if (addr == network_id) + if (addr == network_id && netmask != 32) throw new Error('Please use a real host IP address, not a network identifier.'); - var broadcast = parser.broadcastAddressFromCIDR(src); - if (addr == broadcast) + if (addr == broadcast_addr && netmask != 32) throw new Error('Please use a real host IP address, not a broadcast address.'); return [addr, netmask, network_id]; } function parse_ipv6(val) { - return parse_ip(val, ipaddr.IPv6); + return parse_ip(val, ip_address_lib.Address6); } var Input = function(name) { diff --git a/index.html b/index.html index e285ff5..cb6f84e 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,14 @@ navbar: link: Main icon: home custom_js: - - https://cdn.jsdelivr.net/npm/ipaddr.js@2.0.1/ipaddr.min.js + # ipaddr.js is buggy: https://github.com/whitequark/ipaddr.js/issues/160. + # TODO: revert back to using ipaddr.js if it's fixed? + #- https://cdn.jsdelivr.net/npm/ipaddr.js@2.0.1/ipaddr.min.js + + # This is the "browserified" replacement, ip-address. This bundling procedure + # fucking sucks, but it's the best I've got for now. + - bundle.js + - https://cdn.jsdelivr.net/npm/qrious@4.0.2/dist/qrious.min.js - main.js -- cgit v1.2.3