// @ts-check /// // 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} name * @param {RecordModifier[]} [modifiers] */ function fly(name, modifiers) { var ownershipValue = 'app-d8rdp9j'; var flyApp = 'd8rdp9j.flynet-butterfly-1123.fly.dev.' var rec = name === '@' ? ALIAS : CNAME var primary = rec.bind(null, name, flyApp) var records = [ primary.apply(null, modifiers), TXT.bind(null, prefix(name, '_fly-ownership'), ownershipValue).apply(null, modifiers), ] if (rec === ALIAS) { records.push( HTTPS.bind(null, name, 1, flyApp, https({ alpn: ['h2'], ipv4hint: ['auto'], ipv6hint: ['auto'], })).apply(null, modifiers), ) } return records } /** * @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.'), ] } /** * @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) }) } var nsHosts = ['ns3', 'ns4'].map(function (hostname) { return hostname + '.vpsfree.cz.' }) var nameservers = nsHosts.map(function (hostname) { return NAMESERVER(hostname) }) var soa = SOA('@', 'ns3.vpsfree.cz.', 'hostmaster.alanpearce.eu.', 43200, 3600, 2419200, 120) // Providers: var RegistrarOVH = NewRegistrar('ovh') var PowerDNS = NewDnsProvider('powerdns', { zone_kind: 'Master', }) // Domains: DEFAULTS(DefaultTTL('1d'), NAMESERVER_TTL('1d')) D( 'alanpearce.eu', RegistrarOVH, DnsProvider(PowerDNS), soa, nameservers, CAA_BUILDER({ iodef: 'mailto:alan@alanpearce.eu', issue: [ 'actalis.it', ], issuewild: ['none'], issuemail: ['none'], issuevmc: ['none'] }), fly('@', [TTL('1h')]), HTTPS( '@', 10, 'homestead-homestead488.danubedata.run.', https({ alpn: ['h2'], ipv4hint: ['auto'], ipv6hint: ['auto'], }), TTL('1h') ), // acmeDelegate('@', '019dbafc-1535-723a-a7f4-1767cc565d5f._acme.danubedata.run.'), fly('www'), acmeDelegate('www', 'www.alanpearce.eu.019dd44b._acme.danubedata.run.'), // prettier-ignore bulkCNAME([ 'go', 'git', 'searchix', ], 'smrk.alin.ovh.'), TXT('subdomain-owner-verification', '2da94817a704cfce6a6358d2062f52c9'), IGNORE('home', 'A,AAAA'), IGNORE('_acme-challenge', 'TXT'), IGNORE('_acme-challenge.**', 'TXT'), iCloudMail('alanpearce.eu', 'anzQe301nq7grixH', ['a:smrk.alin.ovh']), DMARC_BUILDER({ policy: 'reject', percent: 100, subdomainPolicy: 'reject', alignmentSPF: 'r', }) ) D( 'alin.ovh', RegistrarOVH, DnsProvider(PowerDNS), soa, nameservers, CAA_BUILDER({ iodef: 'mailto:alin@alin.ovh', issue: [ 'actalis.it', ], issuewild: ['none'], issuemail: ['none'], issuevmc: ['none'] }), fly('@', [TTL('1h')]), HTTPS( '@', 10, 'homestead-homestead488.danubedata.run.', https({ alpn: ['h2'], ipv4hint: ["auto"], ipv6hint: ['auto'], }), TTL('1h') ), acmeDelegate('@', 'alin.ovh.019dd3dc._acme.danubedata.run.'), fly('www'), acmeDelegate('www', 'www.alin.ovh.019dd449._acme.danubedata.run.'), fly('status'), fly('uptime'), bulkCNAME([ 'binarycache', 'cal', 'files', 'git', 'go', 'id', 'iam', 'notify', 'pdns', 'redis', 'searchix', 'stats', '*.stats', ], 'smrk'), bulkCNAME([ 'jf' ], 'home'), IGNORE('home', 'A,AAAA'), IGNORE('_acme-challenge', 'TXT'), IGNORE('_acme-challenge.**', 'TXT'), bulkCNAME([ 'ci', ], 'smrk'), A('smrk', '37.205.15.148'), AAAA('smrk', '2a03:3b40:fe:7f7::1'), HTTPS('smrk', 1, '.', 'alpn=h3,h2 ipv4hint=auto ipv6hint=auto'), SSHFP('smrk', 1, 1, '901839aaf5005948346da47a27f37363f4ddb864'), SSHFP('smrk', 1, 2, 'ef5f7b3cdf0343d63b3c339a4b81095bcaa26be769dc1e06c84c8098277d58ab'), SSHFP('smrk', 4, 1, '20f81f713c0969b5955987fc518f84afd1a3558a'), SSHFP('smrk', 4, 2, '9271f35f41edfab59dde88f640928b86ddc19b0fa5dc640c37e87f572d770b99'), TXT("202603._domainkey", "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArUoGjPPZIrgNU27iLOWqwFHI0WYQE2cnrfnfFxiNlJ0676yHyKTgiegGQpIUeWDrU4/yuwdMm+JHltBAa/8xmn5NBWosZB45W9Ddi0/q5o9pFq2+QbK/+a/TCU5U3MSh2MI5HehASOvNUsjX79aUjz0ni5U7J/vWNcaGwcrqKrfPNFRrXg4s2QoYjJVIwRyVSHzpaMszV0adaD5BmMaRBMnZBls1apQi1KhQsOWegBY65ghW9gw6itJj9OZ9YV5pdEH0m8Gv5RWG+kJVDeGhuvi933PsMmPffnJymwVAI7ndtVp1D1QHRi8gYGqUd46wmUm2wX+v67inS0q9NcY8dwIDAQAB"), TXT("202603._domainkey.smrk", "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArUoGjPPZIrgNU27iLOWqwFHI0WYQE2cnrfnfFxiNlJ0676yHyKTgiegGQpIUeWDrU4/yuwdMm+JHltBAa/8xmn5NBWosZB45W9Ddi0/q5o9pFq2+QbK/+a/TCU5U3MSh2MI5HehASOvNUsjX79aUjz0ni5U7J/vWNcaGwcrqKrfPNFRrXg4s2QoYjJVIwRyVSHzpaMszV0adaD5BmMaRBMnZBls1apQi1KhQsOWegBY65ghW9gw6itJj9OZ9YV5pdEH0m8Gv5RWG+kJVDeGhuvi933PsMmPffnJymwVAI7ndtVp1D1QHRi8gYGqUd46wmUm2wX+v67inS0q9NcY8dwIDAQAB"), AAAA('buk', '2a03:3b40:fe:87::1'), iCloudMail('alin.ovh', 'VgiTkEni66SwcRxU', ['a:smrk.alin.ovh']), DMARC_BUILDER({ policy: 'reject', percent: 100, subdomainPolicy: 'reject', rua: ['mailto:re+wloi96boexp@dmarc.postmarkapp.com'], alignmentSPF: 'r', }) ) D( 'searchix.ovh', RegistrarOVH, DnsProvider(PowerDNS), DefaultTTL(86400), NAMESERVER_TTL(86400), CAA_BUILDER({ iodef: 'mailto:tls@alin.ovh', issue: [ 'actalis.it', ], issuewild: ['none'], issuemail: ['none'], issuevmc: ['none'] }), IGNORE('_acme-challenge', 'TXT'), IGNORE('_acme-challenge.**', 'TXT'), SPF_BUILDER({ parts: ['v=spf1', '-all'], }), soa, nameservers, fly('@', [TTL('1h')]), HTTPS('@', 10, 'smrk.alin.ovh.', 'alpn=h3,h2 ipv4hint=auto ipv6hint=auto', TTL('1h')), // HTTPS('@', 10, 'smrk.alin.ovh.', 'alpn=h3,h2', TTL('1h')), CNAME('stats', 'smrk.alin.ovh.'), fly('stable', [TTL('1h')]), CNAME('stats.stable', 'smrk.alin.ovh.'), fly('status', [TTL('1h')]) )