41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import type { Session } from '@auth/sveltekit';
|
|
import { error } from '@sveltejs/kit';
|
|
import { db } from './db';
|
|
import { users } from './db/schema';
|
|
import { eq } from 'drizzle-orm';
|
|
interface Event {
|
|
locals: {
|
|
auth(): Promise<Session | null>;
|
|
};
|
|
}
|
|
|
|
export async function ensureAuth(event: Event): Promise<Session['user']> {
|
|
const session = await getSession(event);
|
|
if (!session) error(401, { message: 'Du muesch di zersch iiloge' });
|
|
|
|
const user = session.user;
|
|
if (!user || !user.email || !user.id) {
|
|
error(401, { message: 'Du muesch di zersch iiloge' });
|
|
}
|
|
|
|
return user;
|
|
}
|
|
export async function getSession(event: Event) {
|
|
const session = await event.locals.auth();
|
|
if (!session) return null;
|
|
if (!session.user) error(403, { message: 'Di gits garnid. Vilich nomau usloge u iiloge?' });
|
|
if (!session?.user?.email) return null;
|
|
|
|
const res = await db
|
|
.select({ id: users.id })
|
|
.from(users)
|
|
.limit(1)
|
|
.where(eq(users.email, session.user.email));
|
|
|
|
if (!res[0]?.id) {
|
|
error(403, { message: 'Di gits garnid. Vilich nomau usloge u iiloge?' });
|
|
}
|
|
|
|
return { expires: session.expires, user: { ...session.user, id: res[0].id } };
|
|
}
|