From ed01e78d77a9ce65c7c82ec77f96d748906c38c9 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 23 Feb 2022 12:43:04 +0100 Subject: [PATCH] improvement: dns check --- src/routes/applications/[id]/check.json.ts | 29 +++++++++++++++++++--- src/routes/applications/[id]/index.svelte | 13 +++++++--- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/routes/applications/[id]/check.json.ts b/src/routes/applications/[id]/check.json.ts index 82fb487ed..dc1b8ea98 100644 --- a/src/routes/applications/[id]/check.json.ts +++ b/src/routes/applications/[id]/check.json.ts @@ -1,24 +1,47 @@ -import { asyncExecShell, getDomain, getEngine, getUserDetails } from '$lib/common'; +import { dev } from '$app/env'; +import { getDomain, getUserDetails } from '$lib/common'; import * as db from '$lib/database'; import { ErrorHandler } from '$lib/database'; import type { RequestHandler } from '@sveltejs/kit'; +import { promises as dns } from 'dns'; export const post: RequestHandler = async (event) => { const { status, body } = await getUserDetails(event); if (status === 401) return { status, body }; const { id } = event.params; - - let { fqdn } = await event.request.json(); + let { fqdn, forceSave } = await event.request.json(); fqdn = fqdn.toLowerCase(); try { + const domain = getDomain(fqdn); const found = await db.isDomainConfigured({ id, fqdn }); if (found) { throw { message: `Domain ${getDomain(fqdn).replace('www.', '')} is already used.` }; } + if (!dev && !forceSave) { + let ip = []; + let localIp = []; + dns.setServers(['1.1.1.1', '8.8.8.8']); + + try { + localIp = await dns.resolve4(event.url.hostname); + } catch (error) {} + try { + ip = await dns.resolve4(domain); + } catch (error) {} + + if (localIp?.length > 0) { + if (ip?.length === 0 || !ip.includes(localIp[0])) { + throw { + message: `DNS not set or propogated for ${domain}.

Please check your DNS settings.` + }; + } + } + } + return { status: 200 }; diff --git a/src/routes/applications/[id]/index.svelte b/src/routes/applications/[id]/index.svelte index af1d6c2f6..54f7e945f 100644 --- a/src/routes/applications/[id]/index.svelte +++ b/src/routes/applications/[id]/index.svelte @@ -50,6 +50,7 @@ let domainEl: HTMLInputElement; let loading = false; + let forceSave = false; let debug = application.settings.debug; let previews = application.settings.previews; let dualCerts = application.settings.dualCerts; @@ -78,10 +79,13 @@ async function handleSubmit() { loading = true; try { - await post(`/applications/${id}/check.json`, { fqdn: application.fqdn }); + await post(`/applications/${id}/check.json`, { fqdn: application.fqdn, forceSave }); await post(`/applications/${id}.json`, { ...application }); return window.location.reload(); } catch ({ error }) { + if (error.startsWith('DNS not set')) { + forceSave = true; + } return errorNotification(error); } finally { loading = false; @@ -167,8 +171,11 @@ {loading ? 'Saving...' : forceSave ? 'Are you sure to continue?' : 'Save'} {/if} @@ -249,7 +256,7 @@