diff --git a/server/api/routers/auth.ts b/server/api/routers/auth.ts index cf0d7f93..13c099ce 100644 --- a/server/api/routers/auth.ts +++ b/server/api/routers/auth.ts @@ -26,7 +26,7 @@ import { updateAuthById, verify2FA, } from "../services/auth"; -import { TimeSpan } from "lucia"; +import { luciaToken } from "@/server/auth/token"; export const authRouter = createTRPCRouter({ createAdmin: publicProcedure @@ -143,9 +143,9 @@ export const authRouter = createTRPCRouter({ const auth = await findAuthById(ctx.user.authId); if (auth.token) { - await lucia.invalidateSession(auth.token); + await luciaToken.invalidateSession(auth.token); } - const session = await lucia.createSession(auth?.id || "", { + const session = await luciaToken.createSession(auth?.id || "", { expiresIn: 60 * 60 * 24 * 30, }); diff --git a/server/api/trpc.ts b/server/api/trpc.ts index d5db017d..a41f15d3 100644 --- a/server/api/trpc.ts +++ b/server/api/trpc.ts @@ -13,9 +13,10 @@ import { TRPCError, initTRPC } from "@trpc/server"; import type { CreateNextContextOptions } from "@trpc/server/adapters/next"; import superjson from "superjson"; import { ZodError } from "zod"; -import { validateBearerToken, validateRequest } from "../auth/auth"; +import { validateRequest } from "../auth/auth"; import type { Session, User } from "lucia"; import type { OperationMeta } from "openapi-trpc"; +import { validateBearerToken } from "../auth/token"; /** * 1. CONTEXT diff --git a/server/auth/auth.ts b/server/auth/auth.ts index b84b2b60..d5eaf625 100644 --- a/server/auth/auth.ts +++ b/server/auth/auth.ts @@ -16,7 +16,7 @@ export const lucia = new Lucia(adapter, { secure: false, }, }, - // sessionExpiresIn: new TimeSpan(1, "d"), + sessionExpiresIn: new TimeSpan(1, "d"), getUserAttributes: (attributes) => { return { email: attributes.email, @@ -93,32 +93,3 @@ export async function validateWebSocketRequest( const result = await lucia.validateSession(sessionId); return result; } - -export const validateBearerToken = async ( - req: IncomingMessage, -): ReturnValidateToken => { - const authorizationHeader = req.headers.authorization; - const sessionId = lucia.readBearerToken(authorizationHeader ?? ""); - if (!sessionId) { - return { - user: null, - session: null, - }; - } - const result = await lucia.validateSession(sessionId); - - return { - session: result.session, - ...((result.user && { - user: { - authId: result.user.id, - email: result.user.email, - rol: result.user.rol, - id: result.user.id, - secret: result.user.secret, - }, - }) || { - user: null, - }), - }; -}; diff --git a/server/auth/token.ts b/server/auth/token.ts new file mode 100644 index 00000000..f734754d --- /dev/null +++ b/server/auth/token.ts @@ -0,0 +1,49 @@ +import { Lucia } from "lucia/dist/core.js"; +import type { IncomingMessage } from "node:http"; +import { TimeSpan } from "lucia"; +import { adapter, type ReturnValidateToken } from "./auth"; + +export const luciaToken = new Lucia(adapter, { + sessionCookie: { + attributes: { + secure: false, + }, + }, + sessionExpiresIn: new TimeSpan(365, "d"), + getUserAttributes: (attributes) => { + return { + email: attributes.email, + rol: attributes.rol, + secret: attributes.secret !== null, + }; + }, +}); + +export const validateBearerToken = async ( + req: IncomingMessage, +): ReturnValidateToken => { + const authorizationHeader = req.headers.authorization; + const sessionId = luciaToken.readBearerToken(authorizationHeader ?? ""); + if (!sessionId) { + return { + user: null, + session: null, + }; + } + const result = await luciaToken.validateSession(sessionId); + console.log(result); + return { + session: result.session, + ...((result.user && { + user: { + authId: result.user.id, + email: result.user.email, + rol: result.user.rol, + id: result.user.id, + secret: result.user.secret, + }, + }) || { + user: null, + }), + }; +};