| 
									
										
										
										
											2016-10-17 17:40:55 -06:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports.create = function (opts/*, servers*/) { | 
					
						
							|  |  |  |   var PromiseA = opts.PromiseA; | 
					
						
							|  |  |  |   var dns = PromiseA.promisifyAll(require('dns')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return PromiseA.all([ | 
					
						
							| 
									
										
										
										
											2017-02-01 20:00:00 -07:00
										 |  |  |     dns.resolve4Async(opts._old_server_name).then(function (results) { | 
					
						
							| 
									
										
										
										
											2016-10-17 17:40:55 -06:00
										 |  |  |       return results; | 
					
						
							|  |  |  |     }, function () {}) | 
					
						
							| 
									
										
										
										
											2017-02-01 20:00:00 -07:00
										 |  |  |   , dns.resolve6Async(opts._old_server_name).then(function (results) { | 
					
						
							| 
									
										
										
										
											2016-10-17 17:40:55 -06:00
										 |  |  |       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 = { | 
					
						
							| 
									
										
										
										
											2017-02-01 20:00:00 -07:00
										 |  |  |     _old_server_name: 'aj.daplie.me' | 
					
						
							| 
									
										
										
										
											2016-10-17 17:40:55 -06:00
										 |  |  |   , PromiseA: require('bluebird') | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   // ifaces
 | 
					
						
							|  |  |  |   opts.ifaces = require('./local-ip.js').find(); | 
					
						
							|  |  |  |   console.log('opts.ifaces'); | 
					
						
							|  |  |  |   console.log(opts.ifaces); | 
					
						
							| 
									
										
										
										
											2017-02-01 20:00:00 -07:00
										 |  |  |   require('./match-ips.js').match(opts._old_server_name, opts).then(function (ips) { | 
					
						
							| 
									
										
										
										
											2016-10-17 17:40:55 -06:00
										 |  |  |     opts.matchingIps = ips.matchingIps || []; | 
					
						
							|  |  |  |     opts.externalIps = ips.externalIps; | 
					
						
							|  |  |  |     module.exports.create(opts); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |