all repos — dns @ 3cef3a90189886d73a7f13f6e9bacf0866a61d92

DNS records for my domains, managed via dnscontrol

extract generic helpers to own file

Alin
commit

3cef3a90189886d73a7f13f6e9bacf0866a61d92

parent

2d925c1551faf8cc2cad523403950028a54ee11d

1 file changed, 79 insertions(+), 0 deletions(-)

changed files
A helpers.js
@@ -0,0 +1,79 @@
+// @ts-check +/// <reference path="types-dnscontrol.d.ts" /> + +// Helpers + +/** + * @param {object} record + * @param {string[]} [record.alpn] + * @param {string[]} [record.ipv4hint] + * @param {string[]} [record.ipv6hint] + */ +function https(record) { + return Object.keys(record) + .map(function (key) { + return [key, record[key].join(',')].join('=') + }) + .join(' ') +} + +/** + * @param {string} target + */ +function ensureAbsolute(target) { + return target.endsWith('.') ? target : target + '.' +} + +/** + * @param {string} target + * @param {string} prefix + */ +function prefix(target, prefix) { + return target === '@' + ? prefix + : prefix + '.' + target + +} + +/** + * @param {string} name + * @param {string} acmeTarget + */ +function acmeDelegate(name, acmeTarget) { + return CNAME( + name === '@' ? '_acme-challenge' : '_acme-challenge.' + name, + ensureAbsolute(acmeTarget), + TTL('15m'), + ) +} + +/** + * @param {string[]} sources + * @param {string} target + * @param {RecordModifier[]} [recordModifiers] + */ +function bulkCNAME(sources, target, recordModifiers) { + return sources.map(function (source) { + return CNAME.bind(CNAME, source, target).apply(CNAME, recordModifiers) + }) +} + +/** + * @param {string} domain + * @param {string} verification + * @param {string[]} [extras] + */ +function iCloudMail(domain, verification, extras) { + if (extras == null) { + extras = [] + } + return [ + MX('@', 10, 'mx01.mail.icloud.com.'), + MX('@', 10, 'mx02.mail.icloud.com.'), + TXT('@', 'apple-domain=' + verification), + SPF_BUILDER({ + parts: ['v=spf1'].concat(extras).concat('include:icloud.com', '-all'), + }), + CNAME('sig1._domainkey', 'sig1.dkim.' + domain + '.at.icloudmailadmin.com.'), + ] +}