added dns checking
| @@ -9,6 +9,7 @@ import path from 'node:path'; | |||
| 9 | import util from 'node:util'; | 9 | import util from 'node:util'; |
| 10 | import net from 'node:net'; | 10 | import net from 'node:net'; |
| 11 | import dns from 'node:dns'; | 11 | import dns from 'node:dns'; |
| 12 | import { promises as dnsPromise } from 'node:dns' | ||
| 12 | import process from 'node:process'; | 13 | import process from 'node:process'; |
| 13 | import { fileURLToPath } from 'node:url'; | 14 | import { fileURLToPath } from 'node:url'; |
| 14 | 15 | ||
| @@ -383,43 +384,36 @@ function getSessionCookieAge() { | |||
| 383 | } | 384 | } |
| 384 | 385 | ||
| 385 | 386 | ||
| 386 | function canResolve(name, useIPv6 = true, useIPv4 = true) { | 387 | async 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; |
| 390 | 391 | ||
| 391 | if (useIPv6) { | 392 | if (useIPv6) { |
| 392 | dns.resolve6(name, (err) => { | 393 | try { |
| 393 | if (err) { | 394 | await dnsPromise.resolve6(name); |
| 394 | v6Resolve = false | 395 | v6Resolved = true; |
| 395 | } else { | 396 | } catch (error) { |
| 396 | v6Resolve = true | 397 | v6Resolved = false; |
| 397 | } | 398 | } |
| 398 | }); | ||
| 399 | |||
| 400 | } else { | ||
| 401 | v6Resolve = false | ||
| 402 | } | 399 | } |
| 403 | 400 | ||
| 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 = false | 405 | v4Resolved = true; |
| 408 | } else { | 406 | } catch (error) { |
| 409 | v4Resolve = true | 407 | v4Resolved = false; |
| 410 | } | 408 | } |
| 411 | }); | ||
| 412 | |||
| 413 | } else { | ||
| 414 | v4Resolve = false | ||
| 415 | } | 409 | } |
| 416 | 410 | ||
| 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; | ||
| 421 | } | 416 | } |
| 422 | }); | ||
| 423 | } | 417 | } |
| 424 | 418 | ||
| 425 | async function getHasIP() { | 419 | async function getHasIP() { |
| @@ -774,12 +768,14 @@ const preSetupTasks = async function () { | |||
| 774 | 768 | ||
| 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 autorun | 771 | * @returns promise({string} The hostname to use for autorun |
| 778 | */ | 772 | */ |
| 779 | function getAutorunHostname(useIPv6, useIPv4) { | 773 | async 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 | } |
| 785 | 781 | ||
| @@ -792,6 +788,7 @@ function getAutorunHostname(useIPv6, useIPv4) { | |||
| 792 | } | 788 | } |
| 793 | } | 789 | } |
| 794 | 790 | ||
| 791 | |||
| 795 | return autorunHostname; | 792 | return autorunHostname; |
| 796 | } | 793 | } |
| 797 | 794 | ||
| @@ -803,7 +800,7 @@ function getAutorunHostname(useIPv6, useIPv4) { | |||
| 803 | const postSetupTasks = async function (v6Failed, v4Failed, useIPv6, useIPv4) { | 800 | const 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 | } |
| 1047 | 1044 | ||
| 1045 | |||
| 1048 | const [v6Failed, v4Failed] = await startHTTPorHTTPS(useIPv6, useIPv4); | 1046 | const [v6Failed, v4Failed] = await startHTTPorHTTPS(useIPv6, useIPv4); |
| 1049 | 1047 | ||
| 1050 | handleServerListenFail(v6Failed, v4Failed, useIPv6, useIPv4); | 1048 | handleServerListenFail(v6Failed, v4Failed, useIPv6, useIPv4); |