diff --git a/package.json b/package.json
index fd938191b..b0b612f26 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "coolify",
"description": "An open-source & self-hostable Heroku / Netlify alternative.",
- "version": "2.0.19",
+ "version": "2.0.20",
"license": "AGPL-3.0",
"scripts": {
"dev": "docker-compose -f docker-compose-dev.yaml up -d && NODE_ENV=development svelte-kit dev --host 0.0.0.0",
diff --git a/src/lib/database/users.ts b/src/lib/database/users.ts
index ff10d2bc3..9c09d0aaf 100644
--- a/src/lib/database/users.ts
+++ b/src/lib/database/users.ts
@@ -79,7 +79,7 @@ export async function login({ email, password }) {
create: {
id: uid,
name: uniqueName(),
- destinationDocker: { connect: { network: cuid() } }
+ destinationDocker: { connect: { network: 'coolify' } }
}
},
permission: { create: { teamId: uid, permission: 'owner' } }
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 @@