diff --git a/drizzle.config.ts b/drizzle.config.ts index 2b1761f..43f3927 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -5,6 +5,6 @@ export default defineConfig({ schema: "./src/db/schema.ts", dialect: "sqlite", dbCredentials: { - url: process.env.DB_FILE_NAME!, + url: process.env.DB_FILE_NAME ?? "./users.sqlite", }, }); diff --git a/index.ts b/index.ts deleted file mode 100644 index f67b2c6..0000000 --- a/index.ts +++ /dev/null @@ -1 +0,0 @@ -console.log("Hello via Bun!"); \ No newline at end of file diff --git a/src/db/schema.ts b/src/db/schema.ts index 71eb342..36c610f 100644 --- a/src/db/schema.ts +++ b/src/db/schema.ts @@ -2,7 +2,6 @@ import { int, sqliteTable, text } from "drizzle-orm/sqlite-core"; export const usersTable = sqliteTable("users_table", { id: int().primaryKey({ autoIncrement: true }), - name: text().notNull(), - age: int().notNull(), - email: text().notNull().unique(), + sub: int().notNull(), + did: text().notNull().unique(), }); diff --git a/src/db/util.ts b/src/db/util.ts index 2114359..25c5dd3 100644 --- a/src/db/util.ts +++ b/src/db/util.ts @@ -6,16 +6,22 @@ import { usersTable } from "./schema"; export const db = drizzle(new Database(process.env.DB_FILE_NAME!)); -export async function createUser(name: string, age: number, email: string) { +export async function createUser(sub: number, did: string) { const user: typeof usersTable.$inferInsert = { - name, - age, - email, + sub, + did, }; await db.insert(usersTable).values(user); return user; } -export async function getUser(email: string) { - return await db.select().from(usersTable).where(eq(usersTable.email, email)); +export async function getUser(did: string) { + return await db + .select({ did: usersTable.did, sub: usersTable.sub }) + .from(usersTable) + .where(eq(usersTable.did, did)) + .limit(1) + .then((rows) => { + return rows[0] || null; + }); } diff --git a/src/index.ts b/src/index.ts index bf788cd..e47aa8c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,19 +11,29 @@ Bun.serve({ return Response.redirect(redirectUrl.toString(), 302); }, "/auth/:provider/callback": async (req) => { + const did = "did:plc:lgb2xgd64n3swnh7jbtgpvhl"; + const { callback } = await import(`./auth/${req.params.provider}/client`); let claims = await callback(new URL(req.url)); - return Response.json(claims); + if (!claims) { + return new Response("Unauthorized", { status: 401 }); + } else { + const userInfo = await getUser(did); + if (userInfo) { + // user exists + return Response.json(userInfo); + } else { + // create new user + return Response.json( + await createUser(claims.sub, did).then((user) => user) + ); + } + } }, - "/api/users/:email": async (req) => { - return Response.json(await getUser(req.params.email)); - }, - "/api/create": async () => { - return Response.json( - await createUser("Badtz", 27, "me@badtz.dev").then((user) => - JSON.stringify(user) - ) - ); + "/api/users/:did": async (req) => { + console.log("Fetching user with DID:", req.params.did); + + return Response.json(await getUser(req.params.did)); }, }, websocket: {