From 5bb77e4ad440459542e84b159d5245a45ba12a30 Mon Sep 17 00:00:00 2001 From: ngc2207 Date: Fri, 31 Jan 2025 20:25:45 +0800 Subject: [PATCH] feat(auth): add session middleware for user authentication and context management --- src/lib/session-middleware.ts | 55 +++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/lib/session-middleware.ts diff --git a/src/lib/session-middleware.ts b/src/lib/session-middleware.ts new file mode 100644 index 0000000..70c8c6f --- /dev/null +++ b/src/lib/session-middleware.ts @@ -0,0 +1,55 @@ +import "server-only"; + +import { + Client, + Account, + Databases, + Storage, + Models, + type Account as AccountType, + type Databases as DatabasesType, + type Storage as StorageType, + type Users as UsersType, +} from "node-appwrite"; +import { getCookie } from "hono/cookie"; +import { createMiddleware } from "hono/factory"; +import { AUTH_COOKIE } from "@/features/auth/constants"; + +type AdditionalContext = { + Variables: { + account: AccountType; + databases: DatabasesType; + storage: StorageType; + users: UsersType; + user: Models.User; + }; +}; + +export const sessionMiddleware = createMiddleware( + async (c, next) => { + const client = new Client() + .setEndpoint(process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT!) + .setProject(process.env.NEXT_PUBLIC_APPWRITE_PROJECT!); + + const session = getCookie(c, AUTH_COOKIE); + + if (!session) { + return c.json({ error: "Unauthorized" }, 401); + } + + client.setSession(session); + + const account = new Account(client); + const databases = new Databases(client); + const storage = new Storage(client); + + const user = await account.get(); + + c.set("account", account); + c.set("databases", databases); + c.set("storage", storage); + c.set("user", user); + + await next(); + } +);