From d264d44233f6f29e2c0a2157fa6ce5d7fc00a344 Mon Sep 17 00:00:00 2001 From: andrewstech Date: Sat, 17 Aug 2024 21:17:10 +0100 Subject: [PATCH] support additional DNS record types, such as CAA, SRV, and PTR --- dnsconfig.js | 89 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 37 deletions(-) diff --git a/dnsconfig.js b/dnsconfig.js index 525ffaa6..ead89642 100644 --- a/dnsconfig.js +++ b/dnsconfig.js @@ -1,27 +1,11 @@ var regNone = NewRegistrar("none"); var providerCf = DnsProvider(NewDnsProvider("cloudflare")); -var proxy = { // https://stackexchange.github.io/dnscontrol/providers/cloudflare +var proxy = { on: { "cloudflare_proxy": "on" }, off: { "cloudflare_proxy": "off" } } -/** - * Note: glob() is only an internal undocumented helper function (maybe risky). - * - * @param {String} filesPath - * @returns {{ - * name: string, - * data: { - * description?: string, - * domain: string, - * subdomain: string, - * owner?: {repo?: string, email?: string}, - * record: {TXT?: string[], A?: string[], AAAA?: string[], CNAME?: string, NS?: string[]}, - * proxied?: boolean - * }}[]} -*/ - function getDomainsList(filesPath) { var result = []; var files = glob.apply(null, [filesPath, true, '.json']); @@ -30,18 +14,13 @@ function getDomainsList(filesPath) { var basename = files[i].split('/').reverse()[0]; var name = basename.split('.')[0]; - result.push({name: name, data: require(files[i])}); + result.push({ name: name, data: require(files[i]) }); } return result; } var domains = getDomainsList('./domains'); - -/** - * @type {{}} -*/ - var commit = {}; for (var idx in domains) { @@ -56,53 +35,89 @@ for (var idx in domains) { proxyState = proxy.off; } + // Handle A records if (domainData.record.A) { for (var a in domainData.record.A) { commit[domainData.domain].push( - A(domainData.subdomain, IP(domainData.record.A[a]), proxyState) // https://stackexchange.github.io/dnscontrol/js#A - ) + A(domainData.subdomain, IP(domainData.record.A[a]), proxyState) + ); } } + // Handle AAAA records if (domainData.record.AAAA) { for (var aaaa in domainData.record.AAAA) { commit[domainData.domain].push( - AAAA(domainData.subdomain, domainData.record.AAAA[aaaa], proxyState) // https://stackexchange.github.io/dnscontrol/js#AAAA - ) + AAAA(domainData.subdomain, domainData.record.AAAA[aaaa], proxyState) + ); } } + // Handle CNAME records if (domainData.record.CNAME) { commit[domainData.domain].push( - CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState) // https://stackexchange.github.io/dnscontrol/js#CNAME - ) + CNAME(domainData.subdomain, domainData.record.CNAME + ".", proxyState) + ); } - + + // Handle MX records if (domainData.record.MX) { for (var mx in domainData.record.MX) { commit[domainData.domain].push( - MX(domainData.subdomain, 10, domainData.record.MX[mx] + ".") // https://stackexchange.github.io/dnscontrol/js#CNAME - ) - } + MX(domainData.subdomain, 10, domainData.record.MX[mx] + ".") + ); + } } + // Handle NS records if (domainData.record.NS) { for (var ns in domainData.record.NS) { commit[domainData.domain].push( - NS(domainData.subdomain, domainData.record.NS[ns] + ".") // https://stackexchange.github.io/dnscontrol/js#NS - ) + NS(domainData.subdomain, domainData.record.NS[ns] + ".") + ); } } + // Handle TXT records if (domainData.record.TXT) { for (var txt in domainData.record.TXT) { commit[domainData.domain].push( - TXT(domainData.subdomain, domainData.record.TXT[txt]) // https://stackexchange.github.io/dnscontrol/js#TXT - ) + TXT(domainData.subdomain, domainData.record.TXT[txt]) + ); + } + } + + // Handle CAA records + if (domainData.record.CAA) { + for (var caa in domainData.record.CAA) { + var caaRecord = domainData.record.CAA[caa]; + commit[domainData.domain].push( + CAA(domainData.subdomain, caaRecord.flags, caaRecord.tag, caaRecord.value) + ); + } + } + + // Handle SRV records + if (domainData.record.SRV) { + for (var srv in domainData.record.SRV) { + var srvRecord = domainData.record.SRV[srv]; + commit[domainData.domain].push( + SRV(domainData.subdomain, srvRecord.priority, srvRecord.weight, srvRecord.port, srvRecord.target + ".") + ); + } + } + + // Handle PTR records + if (domainData.record.PTR) { + for (var ptr in domainData.record.PTR) { + commit[domainData.domain].push( + PTR(domainData.subdomain, domainData.record.PTR[ptr] + ".") + ); } } } +// Commit all DNS records for (var domainName in commit) { D(domainName, regNone, providerCf, commit[domainName]); }