diff --git a/app/api/auth/logout/route.ts b/app/api/auth/logout/route.ts new file mode 100644 index 0000000..7572597 --- /dev/null +++ b/app/api/auth/logout/route.ts @@ -0,0 +1,52 @@ +import { NextRequest, NextResponse } from 'next/server' +import { cookies } from 'next/headers' +import { db } from '@/lib/db' +import { sessions } from '@/lib/schema' +import { eq } from 'drizzle-orm' + +export const POST = async (request: NextRequest) => { + const token = cookies().get('token') + + if (!token) { + return NextResponse.json( + { message: 'Unauthenticated' }, + { + status: 401, + } + ) + } + + const session = await db.query.sessions.findFirst({ + where: (session, { eq }) => eq(session.sessionToken, token.value), + }) + + if (!session) { + return NextResponse.json( + { message: 'Invalid Token' }, + { + status: 401, + } + ) + } + + if (session.expires < new Date()) { + return NextResponse.json( + { message: 'Invalid Token' }, + { + status: 401, + } + ) + } + + await db + .update(sessions) + .set({ expires: new Date() }) + .where(eq(sessions.sessionToken, token.value)) + + return NextResponse.json( + { message: 'Successfully Logged Out' }, + { + status: 200, + } + ) +}