From 1e325913875642916d526bde52cea0728c0515bb Mon Sep 17 00:00:00 2001 From: axel Date: Sat, 19 Apr 2025 00:58:43 +0200 Subject: [PATCH] feat: add session management page - closes #1 --- .../dash/account/sessions/+page.server.ts | 21 +++++++++ src/routes/dash/account/sessions/+page.svelte | 47 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/routes/dash/account/sessions/+page.server.ts create mode 100644 src/routes/dash/account/sessions/+page.svelte diff --git a/src/routes/dash/account/sessions/+page.server.ts b/src/routes/dash/account/sessions/+page.server.ts new file mode 100644 index 0000000..d0ea62e --- /dev/null +++ b/src/routes/dash/account/sessions/+page.server.ts @@ -0,0 +1,21 @@ +import { FORBIDDEN, SUCCESS } from '$lib/server/commonResponses'; +import { deleteSession, getUserSessions } from '$lib/server/sessions'; +import { fail, type Actions, type ServerLoad } from '@sveltejs/kit'; + +export const load: ServerLoad = async ({ locals: { guard } }) => { + const user = guard.requiresAuth().orRedirects().getUser(); + return { + sessions: getUserSessions(user.id), + }; +}; + +export const actions = { + delete: async ({ locals: { guard }, request }) => { + if (guard.requiresAuth().isFailed()) return FORBIDDEN; + + const id = (await request.formData()).get('id'); + + const deleted = deleteSession({ publicId: id?.toString() }); + return deleted ? SUCCESS : fail(404, { error: 'Could not find session.' }); + }, +} satisfies Actions; diff --git a/src/routes/dash/account/sessions/+page.svelte b/src/routes/dash/account/sessions/+page.svelte new file mode 100644 index 0000000..6a8142d --- /dev/null +++ b/src/routes/dash/account/sessions/+page.svelte @@ -0,0 +1,47 @@ + + + +
+ {#each data.sessions as session} +
+

User-Agent: {session.userAgent}

+

IP Address: {session.ip}

+ +
+

Don't recognize this?

+
+ + + End session + + +
+
+
+ {/each} +
+
+