added dns checking

bab4f2105615e9976a1fa309bf746eda39da1395

BPplays <andymalbp@gmail.com>

1 files changed, +32 -34Ignore whitespace
server.js+32 -34
@@ -9,6 +9,7 @@ import path from 'node:path';
9import util from 'node:util';9import util from 'node:util';
10import net from 'node:net';10import net from 'node:net';
11import dns from 'node:dns';11import dns from 'node:dns';
12import { promises as dnsPromise } from 'node:dns'
12import process from 'node:process';13import process from 'node:process';
13import { fileURLToPath } from 'node:url';14import { fileURLToPath } from 'node:url';
1415
@@ -383,43 +384,36 @@ function getSessionCookieAge() {
383}384}
384385
385386
386function canResolve(name, useIPv6 = true, useIPv4 = true) {387async function canResolve(name, useIPv6 = true, useIPv4 = true) {
387 return new Promise((resolve, reject) => {388 try {
388 let v6Resolve389 let v6Resolved = false;
389 let v4Resolve390 let v4Resolved = false;
390391
391 if (useIPv6) {392 if (useIPv6) {
392 dns.resolve6(name, (err) => {393 try {
393 if (err) {394 await dnsPromise.resolve6(name);
394 v6Resolve = false395 v6Resolved = true;
395 } else {396 } catch (error) {
396 v6Resolve = true397 v6Resolved = false;
397 }398 }
398 });
399
400 } else {
401 v6Resolve = false
402 }399 }
403400
401 // If we need to check IPv4 resolution
404 if (useIPv4) {402 if (useIPv4) {
405 dns.resolve(name, (err) => {403 try {
406 if (err) {404 await dnsPromise.resolve(name);
407 v4Resolve = false405 v4Resolved = true;
408 } else {406 } catch (error) {
409 v4Resolve = true407 v4Resolved = false;
410 }408 }
411 });
412
413 } else {
414 v4Resolve = false
415 }409 }
416410
417 if (v6Resolve || v4Resolve) {411 console.log(v6Resolved, v4Resolved)
418 resolve412 return v6Resolved || v4Resolved;
419 } else {413
420 reject414 } catch (error) {
421 }415 return false;
422 });416 }
423}417}
424418
425async function getHasIP() {419async function getHasIP() {
@@ -774,12 +768,14 @@ const preSetupTasks = async function () {
774768
775/**769/**
776 * Gets the hostname to use for autorun in the browser.770 * Gets the hostname to use for autorun in the browser.
777 * @returns {string} The hostname to use for autorun771 * @returns promise({string} The hostname to use for autorun
778 */772 */
779function getAutorunHostname(useIPv6, useIPv4) {773async function getAutorunHostname(useIPv6, useIPv4) {
780 if (autorunHostname === 'auto') {774 if (autorunHostname === 'auto') {
775 let localhostResolve = await canResolve('localhost', useIPv6, useIPv4)
776
781 if (useIPv6 && useIPv4) {777 if (useIPv6 && useIPv4) {
782 if (avoidLocalhost) return '[::1]';778 if (avoidLocalhost || !localhostResolve) return '[::1]';
783 return 'localhost';779 return 'localhost';
784 }780 }
785781
@@ -792,6 +788,7 @@ function getAutorunHostname(useIPv6, useIPv4) {
792 }788 }
793 }789 }
794790
791
795 return autorunHostname;792 return autorunHostname;
796}793}
797794
@@ -803,7 +800,7 @@ function getAutorunHostname(useIPv6, useIPv4) {
803const postSetupTasks = async function (v6Failed, v4Failed, useIPv6, useIPv4) {800const postSetupTasks = async function (v6Failed, v4Failed, useIPv6, useIPv4) {
804 const autorunUrl = new URL(801 const autorunUrl = new URL(
805 (cliArguments.ssl ? 'https://' : 'http://') +802 (cliArguments.ssl ? 'https://' : 'http://') +
806 (getAutorunHostname(useIPv6, useIPv4)) +803 (await getAutorunHostname(useIPv6, useIPv4)) +
807 (':') +804 (':') +
808 ((autorunPortOverride >= 0) ? autorunPortOverride : server_port),805 ((autorunPortOverride >= 0) ? autorunPortOverride : server_port),
809 );806 );
@@ -1045,6 +1042,7 @@ async function startServer() {
1045 process.exit(1);1042 process.exit(1);
1046 }1043 }
10471044
1045
1048 const [v6Failed, v4Failed] = await startHTTPorHTTPS(useIPv6, useIPv4);1046 const [v6Failed, v4Failed] = await startHTTPorHTTPS(useIPv6, useIPv4);
10491047
1050 handleServerListenFail(v6Failed, v4Failed, useIPv6, useIPv4);1048 handleServerListenFail(v6Failed, v4Failed, useIPv6, useIPv4);