load user env

This commit is contained in:
Benjamin Palko 2025-01-15 15:29:41 -05:00
parent cb645e43a9
commit bbe9184f54
6 changed files with 50 additions and 2 deletions

4
src/app.d.ts vendored
View file

@ -1,5 +1,7 @@
// See https://svelte.dev/docs/kit/types#app.d.ts // See https://svelte.dev/docs/kit/types#app.d.ts
import type { Tenant, User } from '@prisma/client';
// for information about these interfaces // for information about these interfaces
declare global { declare global {
namespace App { namespace App {
@ -10,6 +12,8 @@ declare global {
orgId?: string | null; orgId?: string | null;
sessionId?: string; sessionId?: string;
}; };
user: User;
tenant: Tenant;
} }
// interface PageData {} // interface PageData {}
// interface PageState {} // interface PageState {}

View file

@ -1,3 +1,5 @@
import { loadUserEnv } from '$lib/server/middleware';
import { sequence } from '@sveltejs/kit/hooks';
import { withClerkHandler } from 'clerk-sveltekit/server'; import { withClerkHandler } from 'clerk-sveltekit/server';
export const handle = withClerkHandler(); export const handle = sequence(withClerkHandler(), loadUserEnv());

View file

@ -0,0 +1 @@
export * from './server';

View file

@ -0,0 +1 @@
export * from './loadUserEnv';

View file

@ -0,0 +1,40 @@
import { logger } from '$lib/server/logger';
import { prisma } from '$lib/server/prisma';
import type { Handle } from '@sveltejs/kit';
const unAuthedRoutes = ['/login'];
export function loadUserEnv(): Handle {
return async ({ event, resolve }) => {
if (event.route.id === null || unAuthedRoutes.includes(event.route.id)) {
return resolve(event);
}
try {
const tenant = await prisma.tenant.findUniqueOrThrow({
where: {
clerkOrganizationId: event.locals.auth.orgId ?? undefined,
},
});
const user = await prisma.user.findUniqueOrThrow({
where: {
clerkId_tenantId: { clerkId: event.locals.auth.userId!, tenantId: tenant.id },
},
});
event.locals.tenant = tenant;
event.locals.user = user;
} catch (error) {
if (error instanceof Error) {
logger.error(error.message);
}
return new Response(null, {
status: 307,
headers: {
location: '/login',
},
});
}
return resolve(event);
};
}

View file

@ -21,7 +21,7 @@ export const load = async (event) => {
export const actions = { export const actions = {
update: async (event) => { update: async (event) => {
const form = await event.request.formData(); const form = await event.request.formData();
const tenantId = event.locals.auth!.orgId!; const tenantId = event.locals.tenant.id;
if (!form.has('accountSID')) { if (!form.has('accountSID')) {
return fail(400, { error: 'account_sid_missing' }); return fail(400, { error: 'account_sid_missing' });