improvement: dns check
This commit is contained in:
parent
93aed52f88
commit
ed01e78d77
@ -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 * as db from '$lib/database';
|
||||||
import { ErrorHandler } from '$lib/database';
|
import { ErrorHandler } from '$lib/database';
|
||||||
import type { RequestHandler } from '@sveltejs/kit';
|
import type { RequestHandler } from '@sveltejs/kit';
|
||||||
|
import { promises as dns } from 'dns';
|
||||||
|
|
||||||
export const post: RequestHandler = async (event) => {
|
export const post: RequestHandler = async (event) => {
|
||||||
const { status, body } = await getUserDetails(event);
|
const { status, body } = await getUserDetails(event);
|
||||||
if (status === 401) return { status, body };
|
if (status === 401) return { status, body };
|
||||||
|
|
||||||
const { id } = event.params;
|
const { id } = event.params;
|
||||||
|
let { fqdn, forceSave } = await event.request.json();
|
||||||
let { fqdn } = await event.request.json();
|
|
||||||
fqdn = fqdn.toLowerCase();
|
fqdn = fqdn.toLowerCase();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
const domain = getDomain(fqdn);
|
||||||
const found = await db.isDomainConfigured({ id, fqdn });
|
const found = await db.isDomainConfigured({ id, fqdn });
|
||||||
if (found) {
|
if (found) {
|
||||||
throw {
|
throw {
|
||||||
message: `Domain ${getDomain(fqdn).replace('www.', '')} is already used.`
|
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}.<br><br>Please check your DNS settings.`
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
status: 200
|
status: 200
|
||||||
};
|
};
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
let domainEl: HTMLInputElement;
|
let domainEl: HTMLInputElement;
|
||||||
|
|
||||||
let loading = false;
|
let loading = false;
|
||||||
|
let forceSave = false;
|
||||||
let debug = application.settings.debug;
|
let debug = application.settings.debug;
|
||||||
let previews = application.settings.previews;
|
let previews = application.settings.previews;
|
||||||
let dualCerts = application.settings.dualCerts;
|
let dualCerts = application.settings.dualCerts;
|
||||||
@ -78,10 +79,13 @@
|
|||||||
async function handleSubmit() {
|
async function handleSubmit() {
|
||||||
loading = true;
|
loading = true;
|
||||||
try {
|
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 });
|
await post(`/applications/${id}.json`, { ...application });
|
||||||
return window.location.reload();
|
return window.location.reload();
|
||||||
} catch ({ error }) {
|
} catch ({ error }) {
|
||||||
|
if (error.startsWith('DNS not set')) {
|
||||||
|
forceSave = true;
|
||||||
|
}
|
||||||
return errorNotification(error);
|
return errorNotification(error);
|
||||||
} finally {
|
} finally {
|
||||||
loading = false;
|
loading = false;
|
||||||
@ -167,8 +171,11 @@
|
|||||||
<button
|
<button
|
||||||
type="submit"
|
type="submit"
|
||||||
class:bg-green-600={!loading}
|
class:bg-green-600={!loading}
|
||||||
|
class:bg-orange-600={forceSave}
|
||||||
class:hover:bg-green-500={!loading}
|
class:hover:bg-green-500={!loading}
|
||||||
disabled={loading}>{loading ? 'Saving...' : 'Save'}</button
|
class:hover:bg-orange-400={forceSave}
|
||||||
|
disabled={loading}
|
||||||
|
>{loading ? 'Saving...' : forceSave ? 'Are you sure to continue?' : 'Save'}</button
|
||||||
>
|
>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
@ -249,7 +256,7 @@
|
|||||||
<div class="flex-col">
|
<div class="flex-col">
|
||||||
<label for="fqdn" class="pt-2 text-base font-bold text-stone-100">Domain (FQDN)</label>
|
<label for="fqdn" class="pt-2 text-base font-bold text-stone-100">Domain (FQDN)</label>
|
||||||
<Explainer
|
<Explainer
|
||||||
text="If you specify <span class='text-green-500 font-bold'>https</span>, the application will be accessible only over https. SSL certificate will be generated for you.<br>If you specify <span class='text-green-500 font-bold'>www</span>, the application will be redirected (302) from non-www and vice versa.<br><br>To modify the domain, you must first stop the application."
|
text="If you specify <span class='text-green-500 font-bold'>https</span>, the application will be accessible only over https. SSL certificate will be generated for you.<br>If you specify <span class='text-green-500 font-bold'>www</span>, the application will be redirected (302) from non-www and vice versa.<br><br>To modify the domain, you must first stop the application.<br><br><span class='text-white font-bold'>You must set your DNS to point to the server IP in advance.</span>"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<input
|
<input
|
||||||
|
Loading…
x
Reference in New Issue
Block a user