From aa27aeafa1f4da326e0c1bc269e8ae18a77f3177 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 28 Oct 2022 09:15:03 +0200 Subject: [PATCH] fix fqdn check --- .../api/src/routes/api/v1/services/handlers.ts | 16 +++++----------- apps/api/src/routes/api/v1/services/types.ts | 2 +- apps/ui/src/routes/_NewResource.svelte | 1 + apps/ui/src/routes/index.svelte | 1 + apps/ui/src/routes/services/[id]/index.svelte | 18 +++++++++++++++++- 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/apps/api/src/routes/api/v1/services/handlers.ts b/apps/api/src/routes/api/v1/services/handlers.ts index 52f52c7f2..dccfcc2f5 100644 --- a/apps/api/src/routes/api/v1/services/handlers.ts +++ b/apps/api/src/routes/api/v1/services/handlers.ts @@ -436,23 +436,17 @@ export async function checkServiceDomain(request: FastifyRequest) { try { const { id } = request.params; - let { fqdn, exposePort, forceSave, dualCerts } = request.body; - const otherFqdns = await prisma.serviceSetting.findMany({where: { variableName: {startsWith: '$$coolify_fqdn'}}}) - let domainsList = [] + let { fqdn, exposePort, forceSave, dualCerts, otherFqdn = false } = request.body; + + const domainsList = await prisma.serviceSetting.findMany({ where: { variableName: { startsWith: '$$coolify_fqdn' } } }) + if (fqdn) fqdn = fqdn.toLowerCase(); - if (otherFqdns && otherFqdns.length > 0) { - domainsList = otherFqdns.filter((f) => { - if(f.serviceId !== id) { - return f - } - }); - } if (exposePort) exposePort = Number(exposePort); const { destinationDocker: { remoteIpAddress, remoteEngine, engine }, exposePort: configuredPort } = await prisma.service.findUnique({ where: { id }, include: { destinationDocker: true } }) const { isDNSCheckEnabled } = await prisma.setting.findFirst({}); - let found = await isDomainConfigured({ id, fqdn, remoteIpAddress }); + let found = await isDomainConfigured({ id, fqdn, remoteIpAddress, checkOwn: otherFqdn }); if (found) { throw { status: 500, message: `Domain ${getDomain(fqdn).replace('www.', '')} is already in use!` } } diff --git a/apps/api/src/routes/api/v1/services/types.ts b/apps/api/src/routes/api/v1/services/types.ts index 5839724c8..253c5bcab 100644 --- a/apps/api/src/routes/api/v1/services/types.ts +++ b/apps/api/src/routes/api/v1/services/types.ts @@ -40,7 +40,7 @@ export interface CheckService extends OnlyId { forceSave: boolean, dualCerts: boolean, exposePort: number, - otherFqdns: Array + otherFqdn: boolean } } export interface SaveService extends OnlyId { diff --git a/apps/ui/src/routes/_NewResource.svelte b/apps/ui/src/routes/_NewResource.svelte index 181464821..c02221d02 100644 --- a/apps/ui/src/routes/_NewResource.svelte +++ b/apps/ui/src/routes/_NewResource.svelte @@ -16,6 +16,7 @@ } +
+
doSearch('')} diff --git a/apps/ui/src/routes/services/[id]/index.svelte b/apps/ui/src/routes/services/[id]/index.svelte index 2109f0d66..03d197aa2 100644 --- a/apps/ui/src/routes/services/[id]/index.svelte +++ b/apps/ui/src/routes/services/[id]/index.svelte @@ -78,13 +78,29 @@ if (loading.save) return; loading.save = true; try { + const formData = new FormData(e.target); await post(`/services/${id}/check`, { fqdn: service.fqdn, forceSave, dualCerts, exposePort: service.exposePort }); - const formData = new FormData(e.target); + for (const setting of service.serviceSetting) { + if (setting.variableName.startsWith('$$coolify_fqdn') && setting.value) { + for (let field of formData) { + const [key, value] = field; + if (setting.name === key) { + if (setting.value !== value) { + await post(`/services/${id}/check`, { + fqdn: value, + otherFqdn: true + }); + } + } + } + } + } + if (formData) service = await saveForm(formData, service); setLocation(service); forceSave = false;