From f33e515991a32885622b217bf2ed1d1b0d9d6832 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 7 Feb 2022 11:21:25 +0100 Subject: Correctly check import target URL IP --- server/helpers/dns.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 server/helpers/dns.ts (limited to 'server/helpers') diff --git a/server/helpers/dns.ts b/server/helpers/dns.ts new file mode 100644 index 000000000..da8b666c2 --- /dev/null +++ b/server/helpers/dns.ts @@ -0,0 +1,29 @@ +import { lookup } from 'dns' +import { parse as parseIP } from 'ipaddr.js' + +function dnsLookupAll (hostname: string) { + return new Promise((res, rej) => { + lookup(hostname, { family: 0, all: true }, (err, adresses) => { + if (err) return rej(err) + + return res(adresses.map(a => a.address)) + }) + }) +} + +async function isResolvingToUnicastOnly (hostname: string) { + const addresses = await dnsLookupAll(hostname) + + for (const address of addresses) { + const parsed = parseIP(address) + + if (parsed.range() !== 'unicast') return false + } + + return true +} + +export { + dnsLookupAll, + isResolvingToUnicastOnly +} -- cgit v1.2.3