6decc790d6
DNS records can now be a A record or a CNAME record. All we care about is them resolving to the public IP of the server somehow. The main reason for this change is that altDomain is migrated into domains table and the DNS propagation checks have to work after that. (previously, the 'altDomain' was a signal for a CNAME check which now cannot be done post-migration). In the future, we can make this more sophisticated to instead maybe do a well-known URI query. That way it will work even if there is some proxy like Cloudflare in the middle. Fixes #503
36 lines
1.4 KiB
JavaScript
36 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
exports = module.exports = {
|
|
resolve: resolve
|
|
};
|
|
|
|
var assert = require('assert'),
|
|
dns = require('dns');
|
|
|
|
// a note on TXT records. It doesn't have quotes ("") at the DNS level. Those quotes
|
|
// are added for DNS server software to enclose spaces. Such quotes may also be returned
|
|
// by the DNS REST API of some providers
|
|
function resolve(hostname, rrtype, options, callback) {
|
|
assert.strictEqual(typeof hostname, 'string');
|
|
assert.strictEqual(typeof rrtype, 'string');
|
|
assert(options && typeof options === 'object');
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
const resolver = new dns.Resolver();
|
|
if (options.server) resolver.setServers([ options.server ]);
|
|
|
|
// should callback with ECANCELLED but looks like we might hit https://github.com/nodejs/node/issues/14814
|
|
const timerId = setTimeout(resolver.cancel.bind(resolver), options.timeout || 5000);
|
|
|
|
resolver.resolve(hostname, rrtype, function (error, result) {
|
|
clearTimeout(timerId);
|
|
|
|
if (error && error.code === 'ECANCELLED') error.code = 'TIMEOUT';
|
|
|
|
// result is an empty array if there was no error but there is no record. when you query a random
|
|
// domain, it errors with ENOTFOUND. But if you query an existing domain (A record) but with different
|
|
// type (CNAME) it is not an error and empty array
|
|
callback(error, result);
|
|
});
|
|
}
|