fix fqdn check

This commit is contained in:
Andras Bacsai
2022-10-28 09:15:03 +02:00
parent cdb25cd0e9
commit aa27aeafa1
5 changed files with 25 additions and 13 deletions

View File

@@ -436,23 +436,17 @@ export async function checkServiceDomain(request: FastifyRequest<CheckServiceDom
export async function checkService(request: FastifyRequest<CheckService>) { export async function checkService(request: FastifyRequest<CheckService>) {
try { try {
const { id } = request.params; const { id } = request.params;
let { fqdn, exposePort, forceSave, dualCerts } = request.body; let { fqdn, exposePort, forceSave, dualCerts, otherFqdn = false } = request.body;
const otherFqdns = await prisma.serviceSetting.findMany({where: { variableName: {startsWith: '$$coolify_fqdn'}}})
let domainsList = [] const domainsList = await prisma.serviceSetting.findMany({ where: { variableName: { startsWith: '$$coolify_fqdn' } } })
if (fqdn) fqdn = fqdn.toLowerCase(); 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); if (exposePort) exposePort = Number(exposePort);
const { destinationDocker: { remoteIpAddress, remoteEngine, engine }, exposePort: configuredPort } = await prisma.service.findUnique({ where: { id }, include: { destinationDocker: true } }) const { destinationDocker: { remoteIpAddress, remoteEngine, engine }, exposePort: configuredPort } = await prisma.service.findUnique({ where: { id }, include: { destinationDocker: true } })
const { isDNSCheckEnabled } = await prisma.setting.findFirst({}); const { isDNSCheckEnabled } = await prisma.setting.findFirst({});
let found = await isDomainConfigured({ id, fqdn, remoteIpAddress }); let found = await isDomainConfigured({ id, fqdn, remoteIpAddress, checkOwn: otherFqdn });
if (found) { if (found) {
throw { status: 500, message: `Domain ${getDomain(fqdn).replace('www.', '')} is already in use!` } throw { status: 500, message: `Domain ${getDomain(fqdn).replace('www.', '')} is already in use!` }
} }

View File

@@ -40,7 +40,7 @@ export interface CheckService extends OnlyId {
forceSave: boolean, forceSave: boolean,
dualCerts: boolean, dualCerts: boolean,
exposePort: number, exposePort: number,
otherFqdns: Array<string> otherFqdn: boolean
} }
} }
export interface SaveService extends OnlyId { export interface SaveService extends OnlyId {

View File

@@ -16,6 +16,7 @@
} }
</script> </script>
<!-- svelte-ignore a11y-no-noninteractive-tabindex -->
<div class="dropdown dropdown-bottom"> <div class="dropdown dropdown-bottom">
<slot> <slot>
<label for="new" tabindex="0" class="btn btn-sm text-sm bg-coollabs hover:bg-coollabs-100 w-64"> <label for="new" tabindex="0" class="btn btn-sm text-sm bg-coollabs hover:bg-coollabs-100 w-64">

View File

@@ -541,6 +541,7 @@
</div> </div>
<div class="form-control"> <div class="form-control">
<div class="input-group flex w-full"> <div class="input-group flex w-full">
<!-- svelte-ignore a11y-click-events-have-key-events -->
<div <div
class="btn btn-square cursor-default no-animation hover:bg-error" class="btn btn-square cursor-default no-animation hover:bg-error"
on:click={() => doSearch('')} on:click={() => doSearch('')}

View File

@@ -78,13 +78,29 @@
if (loading.save) return; if (loading.save) return;
loading.save = true; loading.save = true;
try { try {
const formData = new FormData(e.target);
await post(`/services/${id}/check`, { await post(`/services/${id}/check`, {
fqdn: service.fqdn, fqdn: service.fqdn,
forceSave, forceSave,
dualCerts, dualCerts,
exposePort: service.exposePort 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); if (formData) service = await saveForm(formData, service);
setLocation(service); setLocation(service);
forceSave = false; forceSave = false;