From d5cb8e5bdf4e161ea6038c45ad75bc17e346b3dd Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Sat, 20 Jul 2024 12:36:58 +0200 Subject: [PATCH] Create auth.ts middleware --- src/middlewares/auth.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/middlewares/auth.ts diff --git a/src/middlewares/auth.ts b/src/middlewares/auth.ts new file mode 100644 index 0000000..5c4cb58 --- /dev/null +++ b/src/middlewares/auth.ts @@ -0,0 +1,19 @@ +import { NextFunction, Request, Response } from "express"; +import { ISession, Session } from "@models/Session"; +import { Account, IAccount } from "@models/Account"; + +export const authenticate = async (req: Request, res: Response, next: NextFunction) => { + const authHeader = req.header("authorization"); + if (!authHeader) return res.status(400).json({ message: "You need to provide the 'authorization' header" }); + + const headerTrimmed = authHeader.split(" "); + if (headerTrimmed.length !== 2) return res.status(400).json({ message: "You need to provide the token in the 'authorization' header" }); + + req.session = await Session.findOne({ token: headerTrimmed[1] }) as ISession; + if (req.session === null || !req?.session?.verified) return res.status(401).json({ message: "The provided token is wrong" }); + + req.user = await Account.findById(req.session.userId) as IAccount; + if (req.user === null || !req?.user?.verified) return res.status(401).json({ message: "The account associated to the token is not registered" }); + + next(); +}; \ No newline at end of file