From a80db3d80a98a3c46bf47822c6a27655dc29237f Mon Sep 17 00:00:00 2001 From: piopi Date: Wed, 1 Jan 2025 12:31:18 -0500 Subject: [PATCH] feat: add Clerk Auth --- .env | 2 + .gitignore | 1 + bun.lockb | Bin 324951 -> 380450 bytes package.json | 8 +- .../migration.sql | 18 ++++ .../migration.sql | 8 ++ prisma/schema.prisma | 22 +---- src/app.d.ts | 7 +- src/hooks.server.ts | 3 + .../Navigation/Navbar/Navbar.svelte | 2 + src/lib/server/auth/index.ts | 51 +++++++--- src/lib/server/lucia.ts | 31 ------ src/routes/+layout.svelte | 7 +- src/routes/+page.server.ts | 4 +- src/routes/app/+layout.server.ts | 9 +- src/routes/app/+layout.svelte | 28 ++++++ src/routes/login/+page.server.ts | 91 ------------------ src/routes/login/+page.svelte | 69 +++---------- src/vite-env.d.ts | 10 ++ 19 files changed, 146 insertions(+), 225 deletions(-) create mode 100644 prisma/migrations/20250101171120_update_user_table/migration.sql create mode 100644 prisma/migrations/20250101171527_add_clerk_id_to_user_table/migration.sql create mode 100644 src/hooks.server.ts delete mode 100644 src/lib/server/lucia.ts delete mode 100644 src/routes/login/+page.server.ts create mode 100644 src/vite-env.d.ts diff --git a/.env b/.env index ac58967..40c3228 100644 --- a/.env +++ b/.env @@ -1,2 +1,4 @@ VITE_APP_VERSION=1.0.0-alpha DATABASE_URL="postgres://hestia:test123@localhost:5432/hestia" +PUBLIC_CLERK_PUBLISHABLE_KEY=secret_do_not_commit_or_change_this_create_.env.local_instead +CLERK_SECRET_KEY=secret_do_not_commit_or_change_this_create_.env.local_instead diff --git a/.gitignore b/.gitignore index 8c331d8..66c56cc 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ node_modules # OS .DS_Store Thumbs.db +.idea # Vite vite.config.js.timestamp-* diff --git a/bun.lockb b/bun.lockb index a50918c699c6059154810f5e67d4ed4189a7dd23..8d79727b9b0a5f176d3ddb1623a530e5d1a18c7c 100755 GIT binary patch delta 97470 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 Y^)HFZrL$Bw#LE>qR#x4oV$)Lp4@yoDV*mgE delta 67124 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 diff --git a/package.json b/package.json index e026e0e..29c7074 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "type": "module", "scripts": { - "dev": "bun database:up && bun prisma:push && vite dev", + "dev": "bun database:up && bun prisma:generate && bun prisma:push && vite dev", "build": "vite build", "build-storybook": "storybook build", "database:up": "docker compose -p hestia -f devops/docker-compose.dev.yml up -d && docker compose -p hestia -f devops/docker-compose.dev.yml -f devops/docker-compose.wait.yml run --rm wait -c hestia-database:5432", @@ -62,17 +62,19 @@ "vitest": "^2.0.4" }, "dependencies": { + "@clerk/clerk-js": "^5.43.4", + "@clerk/express": "^1.3.31", + "@clerk/themes": "^2.2.3", "@flaticon/flaticon-uicons": "^3.3.1", "@inlang/paraglide-sveltekit": "^0.15.0", - "@lucia-auth/adapter-prisma": "^4.0.1", "@pothos/core": "^4.3.0", "@pothos/plugin-prisma": "^4.4.0", "@prisma/client": "6.0.1", "@tailwindcss/typography": "^0.5.15", + "clerk-sveltekit": "https://pkg.pr.new/wobsoriano/clerk-sveltekit@ca15d4e", "dayjs": "^1.11.13", "graphql": "^16.9.0", "graphql-yoga": "^5.10.4", - "lucia": "^3.2.2", "oslo": "^1.2.1", "pino": "^9.5.0", "pino-pretty": "^13.0.0", diff --git a/prisma/migrations/20250101171120_update_user_table/migration.sql b/prisma/migrations/20250101171120_update_user_table/migration.sql new file mode 100644 index 0000000..1f6c706 --- /dev/null +++ b/prisma/migrations/20250101171120_update_user_table/migration.sql @@ -0,0 +1,18 @@ +/* + Warnings: + + - You are about to drop the column `password` on the `User` table. All the data in the column will be lost. + - You are about to drop the `Session` table. If the table is not empty, all the data it contains will be lost. + +*/ +-- DropForeignKey +ALTER TABLE "Session" DROP CONSTRAINT "Session_userId_fkey"; + +-- DropIndex +DROP INDEX "User_email_key"; + +-- AlterTable +ALTER TABLE "User" DROP COLUMN "password"; + +-- DropTable +DROP TABLE "Session"; diff --git a/prisma/migrations/20250101171527_add_clerk_id_to_user_table/migration.sql b/prisma/migrations/20250101171527_add_clerk_id_to_user_table/migration.sql new file mode 100644 index 0000000..2c52947 --- /dev/null +++ b/prisma/migrations/20250101171527_add_clerk_id_to_user_table/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - Added the required column `clerkId` to the `User` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "User" ADD COLUMN "clerkId" TEXT NOT NULL; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index a23c87a..d23b90b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -15,24 +15,12 @@ datasource db { } model User { - id String @id @default(uuid()) + id String @id @default(uuid()) + clerkId String - email String? @unique - name String - password String - posts Post[] - sessions Session[] - - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt -} - -model Session { - id String @id @default(uuid()) - - expiresAt DateTime - user User @relation(references: [id], fields: [userId]) - userId String + email String? + name String + posts Post[] createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt diff --git a/src/app.d.ts b/src/app.d.ts index 7cce717..335032f 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -4,8 +4,11 @@ declare global { namespace App { // interface Error {} interface Locals { - user: import('lucia').User | null; - session: import('lucia').Session | null; + auth: { + userId?: string; + orgId?: string | null; + sessionId?: string; + }; } // interface PageData {} // interface PageState {} diff --git a/src/hooks.server.ts b/src/hooks.server.ts new file mode 100644 index 0000000..e182571 --- /dev/null +++ b/src/hooks.server.ts @@ -0,0 +1,3 @@ +import { withClerkHandler } from 'clerk-sveltekit/server'; + +export const handle = withClerkHandler(); diff --git a/src/lib/components/Navigation/Navbar/Navbar.svelte b/src/lib/components/Navigation/Navbar/Navbar.svelte index 4b989d8..cdd5b65 100644 --- a/src/lib/components/Navigation/Navbar/Navbar.svelte +++ b/src/lib/components/Navigation/Navbar/Navbar.svelte @@ -1,5 +1,6 @@
- {@render children()} + + {@render children()} +
diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts index 5d81608..0f94248 100644 --- a/src/routes/+page.server.ts +++ b/src/routes/+page.server.ts @@ -1,5 +1,3 @@ import { validateSession } from '$lib/server/auth'; -export async function load(event) { - await validateSession(event); -} +export const load = async (event) => validateSession(event); diff --git a/src/routes/app/+layout.server.ts b/src/routes/app/+layout.server.ts index 894e1f4..0f94248 100644 --- a/src/routes/app/+layout.server.ts +++ b/src/routes/app/+layout.server.ts @@ -1,10 +1,3 @@ import { validateSession } from '$lib/server/auth'; -export async function load(event) { - const { - user: { password: _, ...rest }, - } = await validateSession(event); - return { - user: rest, - }; -} +export const load = async (event) => validateSession(event); diff --git a/src/routes/app/+layout.svelte b/src/routes/app/+layout.svelte index 94df874..0a52b31 100644 --- a/src/routes/app/+layout.svelte +++ b/src/routes/app/+layout.svelte @@ -2,6 +2,8 @@ import { Navbar } from '$lib/components/Navigation'; import type { User } from '@prisma/client'; import type { Snippet } from 'svelte'; + import { onMount } from 'svelte'; + import 'clerk-sveltekit/client'; type Props = { children: Snippet; @@ -11,6 +13,32 @@ }; let { children, data }: Props = $props(); + + let clerk; + + onMount(async () => { + clerk = window.Clerk; + + if (clerk) { + if (!clerk.user || clerk.user?.organizationMemberships.length === 0) { + console.debug('No organizations found'); + await clerk.signOut(); + return; + } + + try { + // Set the active organization to the first one in the list + await clerk.setActive({ + organization: clerk.user?.organizationMemberships[0].organization.id, + }); + console.debug( + `Active organization set to ${clerk.user?.organizationMemberships[0].organization.id}` + ); + } catch (error) { + console.error('Error setting active organization:', error); + } + } + }); diff --git a/src/routes/login/+page.server.ts b/src/routes/login/+page.server.ts deleted file mode 100644 index e703154..0000000 --- a/src/routes/login/+page.server.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { messages } from '$lib/i18n'; -import { email_inuse } from '$lib/paraglide/messages'; -import { logger } from '$lib/server/logger'; -import { auth } from '$lib/server/lucia.js'; -import { prisma } from '$lib/server/prisma'; -import { fail, redirect, type Actions } from '@sveltejs/kit'; -import { Argon2id } from 'oslo/password'; -import { string } from 'zod'; - -export const actions = { - login: async (event) => { - const form = await event.request.formData(); - const email = form.get('email'); - if (typeof email !== 'string') { - return fail(400, { email: { error: messages.email_required() } }); - } - - const password = form.get('password') as string; - if (!password) { - return fail(400, { password: { error: messages.password_required() } }); - } - - const user = await prisma.user.findUnique({ - where: { - email: email, - }, - }); - if (!user) { - logger.error(`User not found! ${email}`); - return fail(404, { email: { value: email, error: messages.user_not_found() } }); - } - - const validPassword = await new Argon2id().verify(user.password, password); - if (!validPassword) { - return fail(400, { - password: { error: messages.password_incorrect() }, - }); - } - const session = await auth.createSession(user.id, []); - const sessionCookie = auth.createSessionCookie(session.id); - event.cookies.set(sessionCookie.name, sessionCookie.value, { - path: '/', - maxAge: 120, - }); - redirect(302, '/'); - }, - - register: async (event) => { - const form = await event.request.formData(); - if (!form.has('email')) { - return fail(400, { email: { error: messages.email_required() } }); - } - const { success, data: email, error } = string().email().safeParse(form.get('email')); - if (!success) { - logger.error(error); - return fail(400, { email: { value: email, error: messages.email_incorrect() } }); - } - - const password = form.get('password'); - if (typeof password !== 'string') { - return fail(400, { password: { error: messages.password_required() } }); - } - const name = form.get('name'); - if (typeof name !== 'string') { - return fail(400, { name: { error: messages.name_required() } }); - } - - const usersWithEmail = await prisma.user.count({ where: { email: email } }); - if (usersWithEmail !== 0) { - return fail(409, { email: { value: email, error: email_inuse() } }); - } - - const hashedPassword = await new Argon2id().hash(password); - const user = await prisma.user.create({ - data: { - email: form.get('email') as string, - name: form.get('name') as string, - password: hashedPassword, - }, - }); - - const session = await auth.createSession(user.id.toString(), {}); - const sessionCookie = auth.createSessionCookie(session.id); - event.cookies.set(sessionCookie.name, sessionCookie.value, { - path: '/', - maxAge: 120, - }); - - redirect(303, '/'); - }, -} satisfies Actions; diff --git a/src/routes/login/+page.svelte b/src/routes/login/+page.svelte index 4978eaf..c73f28d 100644 --- a/src/routes/login/+page.svelte +++ b/src/routes/login/+page.svelte @@ -1,62 +1,23 @@ -{#snippet userIcon()} - -{/snippet} - -{#snippet passwordIcon()} - -{/snippet} - -{#snippet nameIcon()} - -{/snippet} - -{#snippet alert(message: string)} - -{/snippet} - -{#snippet Form(variant: 'login' | 'register')} -
-
- - - {#if variant === 'register'} - - {/if} -
-
-
-
-{/snippet} -
-
-
- {#if form} - {@render alert(Object.values(form)[0].error)} - {/if} - -
- {@render Form(tab === 0 ? 'login' : 'register')} +
+
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..4288c3f --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,10 @@ +/// + +interface ImportMetaEnv { + readonly VITE_CLERK_PUBLISHABLE_KEY: string + // more env variables... +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} \ No newline at end of file