diff --git a/apps/aelis-backend/src/auth/index.ts b/apps/aelis-backend/src/auth/index.ts index 351a25e..0a9b567 100644 --- a/apps/aelis-backend/src/auth/index.ts +++ b/apps/aelis-backend/src/auth/index.ts @@ -16,6 +16,9 @@ export function createAuth(db: Database) { provider: "pg", schema, }), + advanced: { + disableCSRFCheck: process.env.NODE_ENV !== "production", + }, emailAndPassword: { enabled: true, }, diff --git a/apps/aelis-backend/src/server.ts b/apps/aelis-backend/src/server.ts index 22fa66b..300cb96 100644 --- a/apps/aelis-backend/src/server.ts +++ b/apps/aelis-backend/src/server.ts @@ -1,4 +1,5 @@ import { Hono } from "hono" +import { cors } from "hono/cors" import { registerAdminHttpHandlers } from "./admin/http.ts" import { createRequireAdmin } from "./auth/admin-middleware.ts" @@ -50,6 +51,34 @@ function main() { const app = new Hono() + const isDev = process.env.NODE_ENV !== "production" + const allowedOrigins = process.env.CORS_ORIGINS?.split(",").map((o) => o.trim()) ?? [] + + function resolveOrigin(origin: string): string | undefined { + if (isDev) return origin + return allowedOrigins.includes(origin) ? origin : undefined + } + + app.use( + "/api/auth/*", + cors({ + origin: resolveOrigin, + allowHeaders: ["Content-Type", "Authorization"], + allowMethods: ["POST", "GET", "OPTIONS"], + exposeHeaders: ["Content-Length"], + maxAge: 600, + credentials: true, + }), + ) + + app.use( + "*", + cors({ + origin: resolveOrigin, + credentials: true, + }), + ) + app.get("/health", (c) => c.json({ status: "ok" })) const authSessionMiddleware = createRequireSession(auth)