diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 3610d7e..5d02864 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -27,17 +27,16 @@ export const handle: Handle = async ({ event, resolve }) => { } const cactoideUserId = event.cookies.get('cactoideUserId'); - const userId = generateUserId(); const DAYS = 400; // practical upper bound in many browsers for cookies const MAX_AGE = 60 * 60 * 24 * DAYS; const PATH = '/'; if (!cactoideUserId) { - logger.debug({ userId }, 'No cactoideUserId cookie found, generating new one'); - event.cookies.set('cactoideUserId', userId, { path: PATH, maxAge: MAX_AGE }); + logger.debug('No cactoideUserId cookie found, generating new one'); + event.cookies.set('cactoideUserId', generateUserId(), { path: PATH, maxAge: MAX_AGE }); } else { - logger.debug({ cactoideUserId }, 'cactoideUserId cookie found, using existing one'); + logger.debug('cactoideUserId cookie found, using existing one'); } return resolve(event); diff --git a/src/lib/generateUserId.ts b/src/lib/generateUserId.ts index fd8ecee..8cdd8eb 100644 --- a/src/lib/generateUserId.ts +++ b/src/lib/generateUserId.ts @@ -1,5 +1,5 @@ -export const generateUserId = () => { - const userId = 'user_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9); +import { randomUUID } from 'crypto'; - return userId; -}; +// This id is the only credential the app has — it must not be guessable, +// and it must never be serialized to the client. +export const generateUserId = () => 'user_' + randomUUID(); diff --git a/src/lib/i18n/it.json b/src/lib/i18n/it.json index 103ab33..d47a3c7 100644 --- a/src/lib/i18n/it.json +++ b/src/lib/i18n/it.json @@ -259,8 +259,6 @@ "layout": { "defaultTitle": "Cactoide -", "defaultDescription": "Crea e gestisci gli RSVP degli eventi", - "userIdCookieText": "Il tuo UserID memorizzato come cookie:", - "firstTimeVisiting": "Prima visita. Generazione di un nuovo UserID...", "copyright": "© 2025 Cactoide" } } diff --git a/src/lib/i18n/messages.json b/src/lib/i18n/messages.json index a588199..241e8df 100644 --- a/src/lib/i18n/messages.json +++ b/src/lib/i18n/messages.json @@ -291,8 +291,6 @@ "layout": { "defaultTitle": "Cactoide -", "defaultDescription": "Create and manage event RSVPs", - "userIdCookieText": "Your UserID stored as a cookie:", - "firstTimeVisiting": "First time visiting. Generating new UserID...", "copyright": "© 2025 Cactoide" } } diff --git a/src/lib/types.ts b/src/lib/types.ts index 4dab522..98079aa 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -14,7 +14,7 @@ export interface Event { type: EventType; attendee_limit?: number; visibility: EventVisibility; - user_id: string; + is_creator?: boolean; // Optional: absent on events fetched from federated instances created_at: string; updated_at: string; federation?: boolean; // Optional: true if event is from a federated instance @@ -25,7 +25,7 @@ export interface RSVP { id: string; event_id: string; name: string; - user_id: string; + is_mine: boolean; created_at: string; } diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts deleted file mode 100644 index 04fe472..0000000 --- a/src/routes/+layout.server.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function load({ cookies }) { - const cactoideUserId = cookies.get('cactoideUserId'); - - return { - cactoideUserId - }; -} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 85c9c9c..406cc7b 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -3,7 +3,7 @@ import Navbar from '$lib/components/Navbar.svelte'; import { t } from '$lib/i18n/i18n.js'; - let { data, children } = $props(); + let { children } = $props(); @@ -28,12 +28,6 @@