aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web/server/auth.ts
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-23 19:27:31 +0000
committerMohamedBassem <me@mbassem.com>2024-02-23 20:47:54 +0000
commite234d3535c363664902dffe89a2c61ddbc037da4 (patch)
tree5430570d98bc376ce92c8ecc5d2503ecced1d79b /packages/web/server/auth.ts
parentbed57209b09a4bd59dbaf010d58045fe77896ba8 (diff)
downloadkarakeep-e234d3535c363664902dffe89a2c61ddbc037da4.tar.zst
db: Migrate from prisma to drizzle
Diffstat (limited to 'packages/web/server/auth.ts')
-rw-r--r--packages/web/server/auth.ts42
1 files changed, 22 insertions, 20 deletions
diff --git a/packages/web/server/auth.ts b/packages/web/server/auth.ts
index a63bcac4..f2c78190 100644
--- a/packages/web/server/auth.ts
+++ b/packages/web/server/auth.ts
@@ -1,14 +1,16 @@
import NextAuth, { NextAuthOptions, getServerSession } from "next-auth";
-import { PrismaAdapter } from "@next-auth/prisma-adapter";
+import type { Adapter } from "next-auth/adapters";
import AuthentikProvider from "next-auth/providers/authentik";
import serverConfig from "@hoarder/shared/config";
-import { prisma } from "@hoarder/db";
+import { db } from "@hoarder/db";
import { DefaultSession } from "next-auth";
import * as bcrypt from "bcrypt";
import CredentialsProvider from "next-auth/providers/credentials";
+import { DrizzleAdapter } from "@auth/drizzle-adapter";
import { randomBytes } from "crypto";
import { Provider } from "next-auth/providers/index";
+import { apiKeys } from "@hoarder/db/schema";
declare module "next-auth/jwt" {
export interface JWT {
@@ -59,7 +61,8 @@ if (serverConfig.auth.authentik) {
}
export const authOptions: NextAuthOptions = {
- adapter: PrismaAdapter(prisma),
+ // https://github.com/nextauthjs/next-auth/issues/9493
+ adapter: DrizzleAdapter(db) as Adapter,
providers: providers,
session: {
strategy: "jwt",
@@ -99,14 +102,17 @@ export async function generateApiKey(name: string, userId: string) {
const plain = `${API_KEY_PREFIX}_${id}_${secret}`;
- const key = await prisma.apiKey.create({
- data: {
- name: name,
- userId: userId,
- keyId: id,
- keyHash: secretHash,
- },
- });
+ const key = (
+ await db
+ .insert(apiKeys)
+ .values({
+ name: name,
+ userId: userId,
+ keyId: id,
+ keyHash: secretHash,
+ })
+ .returning()
+ )[0];
return {
id: key.id,
@@ -134,11 +140,9 @@ function parseApiKey(plain: string) {
export async function authenticateApiKey(key: string) {
const { keyId, keySecret } = parseApiKey(key);
- const apiKey = await prisma.apiKey.findUnique({
- where: {
- keyId,
- },
- include: {
+ const apiKey = await db.query.apiKeys.findFirst({
+ where: (k, { eq }) => eq(k.keyId, keyId),
+ with: {
user: true,
},
});
@@ -162,10 +166,8 @@ export async function hashPassword(password: string) {
}
export async function validatePassword(email: string, password: string) {
- const user = await prisma.user.findUnique({
- where: {
- email,
- },
+ const user = await db.query.users.findFirst({
+ where: (u, { eq }) => eq(u.email, email),
});
if (!user) {