From c917135bd34cd04bfaa1dfb22bcfef88c1e5bf77 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Wed, 11 May 2022 11:02:21 +0200 Subject: [PATCH] fix: Service checks --- src/routes/applications/[id]/check.json.ts | 2 +- .../services/[id]/_Services/_Services.svelte | 5 +++- src/routes/services/[id]/check.json.ts | 23 ++++++++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/routes/applications/[id]/check.json.ts b/src/routes/applications/[id]/check.json.ts index 021cb5975..6e3b77a6d 100644 --- a/src/routes/applications/[id]/check.json.ts +++ b/src/routes/applications/[id]/check.json.ts @@ -52,7 +52,7 @@ export const post: RequestHandler = async (event) => { exposePort = Number(exposePort); if (exposePort < 1024 || exposePort > 65535) { - throw { message: `Expose Port needs to be between 1024 and 65535.` }; + throw { message: `Exposed Port needs to be between 1024 and 65535.` }; } const publicPort = await getPort({ port: exposePort }); diff --git a/src/routes/services/[id]/_Services/_Services.svelte b/src/routes/services/[id]/_Services/_Services.svelte index facf713c1..00ef5d305 100644 --- a/src/routes/services/[id]/_Services/_Services.svelte +++ b/src/routes/services/[id]/_Services/_Services.svelte @@ -31,7 +31,10 @@ async function handleSubmit() { loading = true; try { - await post(`/services/${id}/check.json`, { fqdn: service.fqdn }); + await post(`/services/${id}/check.json`, { + fqdn: service.fqdn, + exposePort: service.exposePort + }); await post(`/services/${id}/${service.type}.json`, { ...service }); return window.location.reload(); } catch ({ error }) { diff --git a/src/routes/services/[id]/check.json.ts b/src/routes/services/[id]/check.json.ts index 9a9193524..2214de3bf 100644 --- a/src/routes/services/[id]/check.json.ts +++ b/src/routes/services/[id]/check.json.ts @@ -1,19 +1,40 @@ import { asyncExecShell, getDomain, getEngine, getUserDetails } from '$lib/common'; import * as db from '$lib/database'; import { ErrorHandler } from '$lib/database'; +import { t } from '$lib/translations'; import type { RequestHandler } from '@sveltejs/kit'; +import getPort from 'get-port'; 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, exposePort } = await event.request.json(); if (fqdn) fqdn = fqdn.toLowerCase(); try { const found = await db.isDomainConfigured({ id, fqdn }); + if (found) { + throw { + message: t.get('application.domain_already_in_use', { + domain: getDomain(fqdn).replace('www.', '') + }) + }; + } + if (exposePort) { + exposePort = Number(exposePort); + + if (exposePort < 1024 || exposePort > 65535) { + throw { message: `Exposed Port needs to be between 1024 and 65535.` }; + } + + const publicPort = await getPort({ port: exposePort }); + if (publicPort !== exposePort) { + throw { message: `Port ${exposePort} is already in use.` }; + } + } return { status: found ? 500 : 200, body: {