import { Request, Response, NextFunction } from 'express'; import jwt from 'jsonwebtoken'; import env from '../config/environment'; import { Log } from 'nork'; import User from '../models/User'; import { isValidObjectId } from 'mongoose'; export function requireAuth(req: Request, res: Response, next: NextFunction) { const token = req.cookies?.jwt; if (token) { jwt.verify(token, env.JWT_SECRET, async (err: any, decodedToken: any) => { if (err) { // console.error(err.message) res.status(401).send(Log.error(401, 'user is not authenticated')); } if (!err) { const user = await User.findById(decodedToken.id); if (user === null) { res.status(401).send(Log.error(401, 'user is not authenticated')); return; } res.locals.user = user; Log.info(100, 'user is authenticated'); next(); } }); } if (!token) { res.status(401).send(Log.error(401, 'user is not authenticated')); } } export function requireVerified(req: Request, res: Response, next: NextFunction) { if (res.locals.user._id) { if (res.locals.user.verified) { Log.info(100, 'user is verified'); next(); return; } res.status(403).json(Log.error(403, 'user is not verified')); return; } if (!res.locals.user._id) { res.status(401).send(Log.error(401, 'user is not authenticated')); return; } } export class requireRole { static Admin(req: Request, res: Response, next: NextFunction) { if (res.locals.user.admin) { Log.info(100, 'user is admin'); next(); return; } res.status(403).json(Log.error(403, 'insufficient permissions')); return; } static Owner(req: Request, res: Response, next: NextFunction) { try { if (!isValidObjectId(req.body.domain_id)) { throw Log.error(400, 'neznámé domain_id'); } const domain = res.locals.user.domains.filter((domain: any) => domain.domain_id == req.body.domain_id); console.log(domain); if (domain.length < 1) { throw Log.error(400, 'neznámé domain_id'); } if (domain[0].role == 1) { Log.info(100, 'user is owner'); next(); return; } res.status(403).json(Log.error(403, 'insufficient permissions')); return; } catch (err: any) { res.status(400).json(err); } } static Editor(req: Request, res: Response, next: NextFunction) {} static Guest(req: Request, res: Response, next: NextFunction) {} }