diff --git a/backend/src/shared/infra/http/middlewares/ensureAuthenticated.ts b/backend/src/shared/infra/http/middlewares/ensureAuthenticated.ts new file mode 100644 index 0000000..b116032 --- /dev/null +++ b/backend/src/shared/infra/http/middlewares/ensureAuthenticated.ts @@ -0,0 +1,38 @@ +import { Request, Response, NextFunction } from 'express'; +import { verify } from 'jsonwebtoken'; +import { UsersRepository } from '@modules/accounts/infra/typeorm/repositories/UsersRepository'; +import { AppError } from '@errors/AppError'; + +interface IPayload { + sub: string; +} + +export async function ensureAuthenticated(request: Request, response: Response, next: NextFunction) { + const authHeader = request.headers.authorization; + + if (!authHeader) { + throw new AppError('Token missing'); + } + + const [, token] = authHeader.split(' '); + + try { + const { sub: user_id } = verify(token, process.env.APP_JWT_SECRET || '') as IPayload; + + const usersRepository = new UsersRepository(); + + const user = await usersRepository.findByID(user_id); + + if (!user) { + throw new AppError('User does not exists'); + } + + request.user = { + id: user_id + } + + next(); + } catch { + throw new AppError('Invalid token!'); + } +} \ No newline at end of file diff --git a/backend/src/shared/infra/http/routes/index.ts b/backend/src/shared/infra/http/routes/index.ts new file mode 100644 index 0000000..be7c16f --- /dev/null +++ b/backend/src/shared/infra/http/routes/index.ts @@ -0,0 +1,11 @@ +import { Router } from 'express'; +import { usersRoutes } from '@modules/accounts/infra/http/routes/users.routes'; +import { authenticateRouter } from '@modules/accounts/infra/http/routes/authenticate.routes'; +import { propertiesRoutes } from '@modules/properties/infra/http/routes/properties.routes'; +const router = Router(); + +router.use('/users', usersRoutes); +router.use('/sessions', authenticateRouter); +router.use('/properties', propertiesRoutes); + +export { router } \ No newline at end of file