From bb641cb51ec177a3f5bb743e815fae382186bd4c Mon Sep 17 00:00:00 2001 From: Yuri Tatishchev Date: Sat, 12 Apr 2025 01:27:48 -0700 Subject: [PATCH] WIP: attempt to refactor api routes into server load functions --- src/routes/connections/+page.server.ts | 47 ++++++++++++++++++++++++++ src/routes/connections/+page.svelte | 4 +-- src/routes/connections/+page.ts | 9 ----- src/routes/devices/+page.server.ts | 14 ++++++-- src/routes/devices/+page.ts | 9 ----- 5 files changed, 60 insertions(+), 23 deletions(-) create mode 100644 src/routes/connections/+page.server.ts delete mode 100644 src/routes/connections/+page.ts delete mode 100644 src/routes/devices/+page.ts diff --git a/src/routes/connections/+page.server.ts b/src/routes/connections/+page.server.ts new file mode 100644 index 0000000..8e6285f --- /dev/null +++ b/src/routes/connections/+page.server.ts @@ -0,0 +1,47 @@ +import type { PageServerLoad } from './$types'; +import type { ConnectionDetails } from '$lib/connections'; +import { findDevices } from '$lib/server/devices'; +import wgProvider from '$lib/server/wg-provider'; +import { error } from '@sveltejs/kit'; + +export const load: PageServerLoad = async ({ locals, setHeaders, depends }) => { + if (!locals.user) { + error(401, 'Unauthorized'); + } + console.debug('/connections'); + + const peersResult = await wgProvider.findConnections(locals.user); + if (peersResult._tag === 'err') return error(500, peersResult.error.message); + + const devices = await findDevices(locals.user.id); + console.debug('/connections: fetched db devices'); + + // TODO: this is all garbage performance + // filter devices with no recent handshakes + const peers = peersResult.value.filter((peer) => peer.latestHandshake); + + // start from devices, to treat db as the source of truth + const connections: ConnectionDetails[] = []; + for (const device of devices) { + const peerData = peers.find((peer) => peer.publicKey === device.publicKey); + if (!peerData) continue; + connections.push({ + deviceId: device.id, + deviceName: device.name, + devicePublicKey: device.publicKey, + deviceIps: peerData.allowedIps.split(','), + endpoint: peerData.endpoint, + // swap rx and tx, since the opnsense values are from the server perspective + transferRx: peerData.transferTx, + transferTx: peerData.transferRx, + latestHandshake: peerData.latestHandshake, + }); + } + + setHeaders({ + 'Cache-Control': 'max-age=5', + }); + + depends('connections'); + return { connections }; +}; diff --git a/src/routes/connections/+page.svelte b/src/routes/connections/+page.svelte index 1c34d0c..3816c43 100644 --- a/src/routes/connections/+page.svelte +++ b/src/routes/connections/+page.svelte @@ -1,6 +1,6 @@