diff --git a/src/errors/AppError.ts b/src/errors/AppError.ts index a5aec50..f45c974 100644 --- a/src/errors/AppError.ts +++ b/src/errors/AppError.ts @@ -22,4 +22,7 @@ export const Errors = { INVALID_TOKEN: new AppError('INVALID_TOKEN', 400, 'Invalid or already used token'), TOKEN_EXPIRED: new AppError('TOKEN_EXPIRED', 400, 'Token has expired'), ALREADY_CONFIRMED: new AppError('ALREADY_CONFIRMED', 400, 'User is already confirmed'), + + //Auth errors + UNAUTHORIZED: new AppError('UNAUTHORIZED', 401, 'Non authentifié'), } \ No newline at end of file diff --git a/src/middleware/verifyAuth.ts b/src/middleware/verifyAuth.ts new file mode 100644 index 0000000..df2a836 --- /dev/null +++ b/src/middleware/verifyAuth.ts @@ -0,0 +1,16 @@ +import { FastifyRequest, FastifyReply } from 'fastify' +import { verifyAuthToken } from '../services/authToken.service.js' +import { Errors } from '../errors/AppError.js' + +export async function verifyAuth(request: FastifyRequest, reply: FastifyReply) { + const token = request.cookies['authToken'] + + if (!token) throw Errors.UNAUTHORIZED + + try { + const payload = await verifyAuthToken(request.server, request.server.prisma, token) + request.user = payload + } catch { + throw Errors.UNAUTHORIZED + } +} \ No newline at end of file diff --git a/src/types/fastify.d.ts b/src/types/fastify.d.ts index ad0a8a2..6e92df4 100644 --- a/src/types/fastify.d.ts +++ b/src/types/fastify.d.ts @@ -4,4 +4,11 @@ declare module 'fastify' { interface FastifyInstance { prisma: PrismaClient } + + interface FastifyRequest { + user: { + userId: string + tokenVersion: number + } + } } \ No newline at end of file