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);
 | 
						|
  });
 | 
						|
}
 |