diff --git a/frontend/src/lib/auth.ts b/frontend/src/lib/auth.ts index 6546c85..a156f66 100644 --- a/frontend/src/lib/auth.ts +++ b/frontend/src/lib/auth.ts @@ -4,6 +4,7 @@ import { browser } from '$app/environment'; const TOKEN_KEY = 'eventsnap_jwt'; const PIN_KEY = 'eventsnap_pin'; const USER_ID_KEY = 'eventsnap_user_id'; +const DISPLAY_NAME_KEY = 'eventsnap_display_name'; export const isAuthenticated = writable(false); @@ -22,11 +23,28 @@ export function getUserId(): string | null { return localStorage.getItem(USER_ID_KEY); } -export function setAuth(jwt: string, pin: string | null, userId: string): void { +export function getDisplayName(): string | null { + if (!browser) return null; + return localStorage.getItem(DISPLAY_NAME_KEY); +} + +export function getExpiry(): Date | null { + const token = getToken(); + if (!token) return null; + try { + const payload = JSON.parse(atob(token.split('.')[1])); + return payload.exp ? new Date(payload.exp * 1000) : null; + } catch { + return null; + } +} + +export function setAuth(jwt: string, pin: string | null, userId: string, displayName?: string): void { if (!browser) return; localStorage.setItem(TOKEN_KEY, jwt); if (pin) localStorage.setItem(PIN_KEY, pin); localStorage.setItem(USER_ID_KEY, userId); + if (displayName) localStorage.setItem(DISPLAY_NAME_KEY, displayName); isAuthenticated.set(true); } diff --git a/frontend/src/routes/account/+page.svelte b/frontend/src/routes/account/+page.svelte new file mode 100644 index 0000000..4e1977e --- /dev/null +++ b/frontend/src/routes/account/+page.svelte @@ -0,0 +1,137 @@ + + +
{displayName ?? 'Unbekannt'}
+ + {roleLabel(role)} + +Sitzung gültig bis {formatDate(expiry)}
+ {/if} ++ Du brauchst diesen PIN, um dein Konto auf einem anderen Gerät wiederherzustellen. Schreib ihn auf! +
+ {#if pin} ++ Auf einem anderen Gerät kannst du dein Konto mit deinem Namen und PIN wiederherstellen. +
+ + Zur Wiederherstellungs-Seite → + +