forked from coolaj86/goldilocks.js
89 lines
2.5 KiB
JavaScript
89 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
module.exports.create = function (opts/*, servers*/) {
|
|
var PromiseA = opts.PromiseA;
|
|
var dns = PromiseA.promisifyAll(require('dns'));
|
|
|
|
return PromiseA.all([
|
|
dns.resolve4Async(opts._old_server_name).then(function (results) {
|
|
return results;
|
|
}, function () {})
|
|
, dns.resolve6Async(opts._old_server_name).then(function (results) {
|
|
return results;
|
|
}, function () {})
|
|
]).then(function (results) {
|
|
var ipv4 = results[0] || [];
|
|
var ipv6 = results[1] || [];
|
|
var record;
|
|
|
|
opts.dnsRecords = {
|
|
A: ipv4
|
|
, AAAA: ipv6
|
|
};
|
|
|
|
Object.keys(opts.ifaces).some(function (ifacename) {
|
|
var iface = opts.ifaces[ifacename];
|
|
|
|
return iface.ipv4.some(function (localIp) {
|
|
return ipv4.some(function (remoteIp) {
|
|
if (localIp.address === remoteIp) {
|
|
record = localIp;
|
|
return record;
|
|
}
|
|
});
|
|
}) || iface.ipv6.some(function (localIp) {
|
|
return ipv6.forEach(function (remoteIp) {
|
|
if (localIp.address === remoteIp) {
|
|
record = localIp;
|
|
return record;
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
if (!record) {
|
|
console.info("DNS Record '" + ipv4.concat(ipv6).join(',') + "' does not match any local IP address.");
|
|
console.info("Use --ddns to allow the people of the Internet to access your server.");
|
|
}
|
|
|
|
opts.externalIps.ipv4.some(function (localIp) {
|
|
return ipv4.some(function (remoteIp) {
|
|
if (localIp.address === remoteIp) {
|
|
record = localIp;
|
|
return record;
|
|
}
|
|
});
|
|
});
|
|
|
|
opts.externalIps.ipv6.some(function (localIp) {
|
|
return ipv6.some(function (remoteIp) {
|
|
if (localIp.address === remoteIp) {
|
|
record = localIp;
|
|
return record;
|
|
}
|
|
});
|
|
});
|
|
|
|
if (!record) {
|
|
console.info("DNS Record '" + ipv4.concat(ipv6).join(',') + "' does not match any local IP address.");
|
|
console.info("Use --ddns to allow the people of the Internet to access your server.");
|
|
}
|
|
});
|
|
};
|
|
|
|
if (require.main === module) {
|
|
var opts = {
|
|
_old_server_name: 'aj.daplie.me'
|
|
, PromiseA: require('bluebird')
|
|
};
|
|
// ifaces
|
|
opts.ifaces = require('./local-ip.js').find();
|
|
console.log('opts.ifaces');
|
|
console.log(opts.ifaces);
|
|
require('./match-ips.js').match(opts._old_server_name, opts).then(function (ips) {
|
|
opts.matchingIps = ips.matchingIps || [];
|
|
opts.externalIps = ips.externalIps;
|
|
module.exports.create(opts);
|
|
});
|
|
}
|