19 implement i18n (#29)

* init paraglide

* change export

* shared session check

* message param

* format

* check user is present

A session can exist without a user, if the user was recently deleted

* wtf

* lol bad redirect code
This commit is contained in:
Baobeld 2024-12-20 11:41:01 -05:00 committed by GitHub
parent 264f6d775d
commit 8969e2b8aa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 84 additions and 49 deletions

View file

@ -1,13 +1,15 @@
<script lang="ts">
import { messages } from '$lib/i18n';
let { title, username }: { title: string; username: string } = $props();
let greeting = $derived(`Welcome ${username}!`);
let message = $derived(messages.greeting({ name: username }));
</script>
<header class="navbar justify-between bg-base-200 px-4">
<h2 class="prose prose-xl">Hestia</h2>
<h1 class="prose prose-2xl">{title}</h1>
<p class="prose prose-lg">{greeting}</p>
<p class="prose prose-lg">{message}</p>
</header>
<style>

4
src/lib/i18n/index.ts Normal file
View file

@ -0,0 +1,4 @@
import * as runtime from '$lib/paraglide/runtime';
import { createI18n } from '@inlang/paraglide-sveltekit';
export * as messages from '$lib/paraglide/messages';
export const i18n = createI18n(runtime);

View file

@ -0,0 +1,22 @@
import { redirect, type ServerLoadEvent } from '@sveltejs/kit';
import dayjs from 'dayjs';
import { prisma } from '../prisma';
export async function validateSession(event: ServerLoadEvent) {
const sessionId = event.cookies.get('auth_session');
if (!sessionId) {
redirect(302, '/login');
}
const session = await prisma.session.findUnique({
where: { id: sessionId },
include: { user: true },
});
if (!session || !session.user) {
redirect(302, '/login');
}
const expiry = session.expiresAt;
if (dayjs(expiry).isBefore(dayjs())) {
redirect(302, '/login');
}
return session;
}