import { db } from '@/db/PrismaClient'; import { NextApiRequest, NextApiResponse } from 'next'; import { TRPCError } from '@trpc/server'; import { cookieFunctions } from '../cookies'; import { User } from '@prisma/client' export const getSession = async (req: NextApiRequest, res: NextApiResponse) => { const session_token = req.cookies[process.env.SESSION_COOKIE_NAME]; if (session_token == null) { return { session_valid: false, user: {}, } as { session_valid: boolean, user: User, }; } const userIP = req.headers['x-real-ip'] as string|| req.socket.remoteAddress; const userAgent = req.headers['user-agent'] as string; const session = await db.session.findUnique({ where: { session_token: session_token, } }) .catch((error) => { console.log(error); throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: `Error: there was an issue finding the session. ${(error as Error).message}`, cause: error }); } ); if (session == null){ await cookieFunctions.deleteCookie(res); return { session_valid: false, user: {}, } as { session_valid: boolean, user: User, }; } if (session.expires < new Date()) { await db.session.delete({ where: { session_token: session_token, } }) .catch((error) => { console.log(error); throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: `Error: there was an issue deleting the session. ${(error as Error).message}`, cause: error }); }) .then( async () => { await cookieFunctions.deleteCookie(res); }); return { session_valid: false, user: {}, } as { session_valid: boolean, user: User, }; } const user = await db.user.findUnique({ where: { userId: session.userId, }, }) .catch((error) => { console.log(error); throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: `Error: there was an issue finding the user. ${(error as Error).message}`, cause: error }); } ); if (user == null) { await db.session.delete({ where: { session_token: session_token, } }) .catch((error) => { console.log(error); throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: `Error: there was an issue deleting the session. ${(error as Error).message}`, cause: error }); }) .then( async () => { await cookieFunctions.deleteCookie(res); }); return { session_valid: false, user: {}, } as { session_valid: boolean, user: User, }; } const { hash, salt, ...userWithoutPassword } = user; return { session_valid: true, user: userWithoutPassword, } as { session_valid: boolean, user: User, }; }