added dns checking

bab4f2105615e9976a1fa309bf746eda39da1395

BPplays <andymalbp@gmail.com>

1 files changed, +29 -31Showing whitespace changes
server.js+29 -31
@@ -9,6 +9,7 @@ import path from 'node:path';
99import util from 'node:util';
1010import net from 'node:net';
1111import dns from 'node:dns';
12+import { promises as dnsPromise } from 'node:dns'
1213import process from 'node:process';
1314import { fileURLToPath } from 'node:url';
1415
@@ -383,43 +384,36 @@ function getSessionCookieAge() {
383384}
384385
385386
386387async function canResolve(name, useIPv6 = true, useIPv4 = true) {
387- return new Promise((resolve, reject) => {
388+ try {
388- let v6Resolve
389+ let v6Resolved = false;
389- let v4Resolve
390+ let v4Resolved = false;
390391
391392 if (useIPv6) {
392- dns.resolve6(name, (err) => {
393+ try {
393- if (err) {
394+ await dnsPromise.resolve6(name);
394- v6Resolve = false
395+ v6Resolved = true;
395396 } elsecatch (error) {
396- v6Resolve = true
397+ v6Resolved = false;
397398 }
398- });
399-
400- } else {
401- v6Resolve = false
402399 }
403400
401+ // If we need to check IPv4 resolution
404402 if (useIPv4) {
405- dns.resolve(name, (err) => {
403+ try {
406- if (err) {
404+ await dnsPromise.resolve(name);
407- v4Resolve = false
405+ v4Resolved = true;
408406 } elsecatch (error) {
409- v4Resolve = true
407+ v4Resolved = false;
410408 }
411- });
412-
413- } else {
414- v4Resolve = false
415409 }
416410
417- if (v6Resolve || v4Resolve) {
411+ console.log(v6Resolved, v4Resolved)
418- resolve
412+ return v6Resolved || v4Resolved;
419- } else {
413+
420- reject
414+ } catch (error) {
415+ return false;
421416 }
422- });
423417}
424418
425419async function getHasIP() {
@@ -774,12 +768,14 @@ const preSetupTasks = async function () {
774768
775769/**
776770 * Gets the hostname to use for autorun in the browser.
777771 * @returns promise({string} The hostname to use for autorun
778772 */
779773async function getAutorunHostname(useIPv6, useIPv4) {
780774 if (autorunHostname === 'auto') {
775+ let localhostResolve = await canResolve('localhost', useIPv6, useIPv4)
776+
781777 if (useIPv6 && useIPv4) {
782778 if (avoidLocalhost || !localhostResolve) return '[::1]';
783779 return 'localhost';
784780 }
785781
@@ -792,6 +788,7 @@ function getAutorunHostname(useIPv6, useIPv4) {
792788 }
793789 }
794790
791+
795792 return autorunHostname;
796793}
797794
@@ -803,7 +800,7 @@ function getAutorunHostname(useIPv6, useIPv4) {
803800const postSetupTasks = async function (v6Failed, v4Failed, useIPv6, useIPv4) {
804801 const autorunUrl = new URL(
805802 (cliArguments.ssl ? 'https://' : 'http://') +
806803 (await getAutorunHostname(useIPv6, useIPv4)) +
807804 (':') +
808805 ((autorunPortOverride >= 0) ? autorunPortOverride : server_port),
809806 );
@@ -1045,6 +1042,7 @@ async function startServer() {
10451042 process.exit(1);
10461043 }
10471044
1045+
10481046 const [v6Failed, v4Failed] = await startHTTPorHTTPS(useIPv6, useIPv4);
10491047
10501048 handleServerListenFail(v6Failed, v4Failed, useIPv6, useIPv4);