diff --git a/src/api/authService.ts b/src/api/authService.ts index c9aa6b3..b041d2e 100644 --- a/src/api/authService.ts +++ b/src/api/authService.ts @@ -16,8 +16,14 @@ export const login = async (event: RequestEvent, username: string, password: str }); if (!response.ok) { - const errorData = await response.json().catch(() => ({ error: 'Invalid username or password.' })); - authStore.set({ token: undefined, error: errorData.error || 'Invalid username or password.' }); + console.log(response); + const errorData = await response + .json() + .catch(() => ({ error: 'Invalid username or password.' })); + authStore.set({ + token: undefined, + error: errorData.error || 'Invalid username or password.' + }); return false; } diff --git a/src/hooks.server.ts b/src/hooks.server.ts index a719f3b..4984e15 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,10 +1,48 @@ -import type { ServerInit } from '@sveltejs/kit'; +import type { Handle } from '@sveltejs/kit'; import { redisSessionManager } from '$stores/redisSessionManager'; +import { env } from '$env/dynamic/private'; import type Redis from 'ioredis'; -const redisClient: Redis = redisSessionManager['redisClient']; -export const init: ServerInit = async () => { - console.log(redisClient.status); - if (redisClient.status == 'connect') return; - await redisClient.connect(); +export const handle: Handle = async ({ event, resolve }) => { + // Ensure redis is connected + const redisClient: Redis = redisSessionManager['redisClient']; + if (redisClient.status !== 'connect' && redisClient.status !== 'ready') { + try { + await redisClient.connect(); + } catch (err) { + console.error('Redis connection failed', err); + // We can still continue without a user session, but log the error. + } + } + + // Get session from cookie + const session = await redisSessionManager.getSession(event.cookies); + + if (session && session.data && session.data.token) { + try { + // Fetch user data from /api/me + const response = await fetch(`${env.API_BASE_URL}/auth/me`, { + headers: { + Authorization: `Bearer ${session.data.token}` + } + }); + + if (response.ok) { + const user = await response.json(); + event.locals.user = user; + } else { + console.log(await response.text(), response.status); + // Token might be invalid/expired, clear it + event.locals.user = null; + await redisSessionManager.deleteCookie(event.cookies); + } + } catch (error) { + console.error('Failed to fetch user:', error); + event.locals.user = null; + } + } else { + event.locals.user = null; + } + + return resolve(event); }; diff --git a/src/routes/dashboard/+page.svelte b/src/routes/dashboard/+page.svelte index 22d002d..967b312 100644 --- a/src/routes/dashboard/+page.svelte +++ b/src/routes/dashboard/+page.svelte @@ -17,10 +17,21 @@

ACC Server Manager

- {#if hasPermission($user, 'membership.view')} + {#if false && hasPermission($user, 'membership.view')} - - + +