From 103f1cf3c4a4a4c19d2623ed28b5d8472feb6df3 Mon Sep 17 00:00:00 2001 From: Dilan Gilluly Date: Thu, 10 Sep 2026 17:58:25 -0400 Subject: [PATCH] (change): Client security --- client/src/hooks.server.js | 26 +++++- .../src/lib/client/components/PagerBar.svelte | 10 +++ client/src/lib/server/settings/index.js | 3 +- client/src/routes/+layout.server.js | 6 ++ .../routes/api/backuprestore/local/+server.js | 84 ++++++++++--------- .../src/routes/baskets/[prefix]/+page.svelte | 41 +++++---- .../src/routes/drawing/[prefix]/+page.svelte | 42 +++++----- client/src/routes/reports/counts/+page.svelte | 4 +- client/src/routes/search/tickets/+page.svelte | 24 +++--- client/src/routes/settings/+page.svelte | 16 ++-- .../routes/settings/auth-keys/+page.svelte | 9 +- .../settings/backuprestore/+page.svelte | 11 ++- .../src/routes/settings/prefixes/+page.svelte | 6 +- .../src/routes/tickets/[prefix]/+page.svelte | 6 +- .../client/portable/linux/run-server.sh | 2 +- rp/Caddyfile | 2 +- 16 files changed, 177 insertions(+), 115 deletions(-) create mode 100644 client/src/routes/+layout.server.js diff --git a/client/src/hooks.server.js b/client/src/hooks.server.js index bd7f61e..9d924b1 100644 --- a/client/src/hooks.server.js +++ b/client/src/hooks.server.js @@ -1,9 +1,9 @@ import { db } from '$lib/server/db'; -import { env } from '$env/dynamic/private'; +import { env } from '$env/dynamic/public'; +import { randomUUID } from 'crypto'; export const init = async () => { - env.NODE_TLS_REJECT_UNAUTHORIZED = 0; - env.BODY_SIZE_LIMIT = 'Infinity'; + env.PUBLIC_TAM_CLIENT_ID = randomUUID(); await db.run(`CREATE TABLE IF NOT EXISTS baskets ( prefix text, b_id integer, @@ -42,3 +42,23 @@ export const init = async () => { SELECT 'Total', COUNT(DISTINCT(CONCAT(first_name, last_name, phone_number))), COUNT(*) FROM tickets`); }; + +export const handle = async ({ event, resolve }) => { + if (event.url.pathname.startsWith('/api')) { + const clientID = event.request.headers.get('TAM-CLIENT-ID'); + if (env.PUBLIC_TAM_CLIENT_ID == clientID) { + const response = await resolve(event); + return response; + } else { + return new Response(JSON.stringify({detail: "Unauthorized"}), { status: 401 }) + } + } else { + const response = await resolve(event); + return response; + } +} + +export const handleFetch = async ({ request, fetch }) => { + request.headers.set('TAM-CLIENT-ID', env.PUBLIC_TAM_CLIENT_ID); + return fetch(request); +} diff --git a/client/src/lib/client/components/PagerBar.svelte b/client/src/lib/client/components/PagerBar.svelte index 69ad7c8..0359698 100644 --- a/client/src/lib/client/components/PagerBar.svelte +++ b/client/src/lib/client/components/PagerBar.svelte @@ -43,6 +43,11 @@ oninput={() => { if (functions.pagerFromUpdate) functions.pagerFromUpdate(); }} + onkeydown={(e) => { + if (e.key == "Enter") { + functions.getPage() + } + }} bind:value={pager.idFrom} />
-
@@ -54,6 +59,11 @@ onclick={(e) => { e.target.select(); }} + onkeydown={(e) => { + if (e.key == "Enter") { + functions.getPage() + } + }} bind:value={pager.idTo} /> + class={bS.gray} + onclick={() => { + settings.disable_attrib + ? (settings.disable_attrib = false) + : (settings.disable_attrib = true); + }}>{settings.disable_attrib ? 'Yes' : 'No'}
300) { pager.idTo = pager.idFrom + 300; } - const res = await fetch(`/api/tickets/${prefix.prefix}/${pager.idFrom}/${pager.idTo}`); + const res = await fetch(`/api/tickets/${prefix.prefix}/${pager.idFrom}/${pager.idTo}`, {headers: {'TAM-CLIENT-ID': tamClientID}}); const resData = await res.json(); resData.map((i) => (i.changed = false)); items = [...resData]; @@ -51,7 +51,7 @@ if (itemsBuffer.length > 0) { const res = await fetch('/api/tickets', { method: 'POST', - headers: { 'Content-Type': 'application/json' }, + headers: { 'Content-Type': 'application/json', 'TAM-CLIENT-ID': tamClientID }, body: JSON.stringify(itemsBuffer) }); if (res.ok) { diff --git a/deployments/client/portable/linux/run-server.sh b/deployments/client/portable/linux/run-server.sh index c6f7a24..2f51db2 100644 --- a/deployments/client/portable/linux/run-server.sh +++ b/deployments/client/portable/linux/run-server.sh @@ -3,4 +3,4 @@ if [ ! -d "./data" ]; then mkdir ./data fi -HOST=127.0.0.1 PORT=3000 ./exe/bin/node ./build +NODE_TLS_REJECT_UNAUTHORIZED=0 BODY_SIZE_LIMIT=Infinity HOST=localhost PORT=3000 ./exe/bin/node ./build diff --git a/rp/Caddyfile b/rp/Caddyfile index c023b1c..816d440 100644 --- a/rp/Caddyfile +++ b/rp/Caddyfile @@ -1,4 +1,4 @@ -{$TAM_HOSTNAME:tam.lan}:8443 { +*:8443 { tls internal reverse_proxy {$TAM_SERVER:localhost}:8000 }