push de la fleme
This commit is contained in:
49
middlewares/AuthorizationMiddleware.js
Normal file
49
middlewares/AuthorizationMiddleware.js
Normal file
@@ -0,0 +1,49 @@
|
||||
const {JwtVerify} = require("../services/JwtService");
|
||||
const {getUserFromId} = require("../services/UserService");
|
||||
const {log} = require("../utils/logging");
|
||||
const UNAUTHORIZED = 401;
|
||||
const FORBIDDEN = 403;
|
||||
const UNAUTH_MESSAGE = 'Missing Authorization Header';
|
||||
const INVALID_TOKEN_MESSAGE = 'Invalid or expired token.';
|
||||
|
||||
async function validateJWT(req, res, next) {
|
||||
log('MIDDLEWARE', 'JWT', `Vérification du jwt... (${req.ip})`)
|
||||
const authHeader = req.headers.authorization;
|
||||
if (!authHeader) {
|
||||
res.status(UNAUTHORIZED).json({message: UNAUTH_MESSAGE});
|
||||
return;
|
||||
}
|
||||
|
||||
const bearerToken = authHeader.split(' ')[1];
|
||||
const isTokenValid = await JwtVerify(bearerToken);
|
||||
|
||||
if (isTokenValid !== false) {
|
||||
log('MIDDLEWARE', 'JWT', `Token valide. (${req.ip})`)
|
||||
next();
|
||||
} else {
|
||||
log('MIDDLEWARE', 'CHECK', `Token invalide (${req.ip})`)
|
||||
res.status(FORBIDDEN).json({message: INVALID_TOKEN_MESSAGE});
|
||||
}
|
||||
}
|
||||
|
||||
async function isAdmin(req, res, next) {
|
||||
log('MIDDLEWARE', 'ROLE', `Vérification du role... (${req.ip})`)
|
||||
const authHeader = req.headers.authorization;
|
||||
const bearerToken = authHeader.split(' ')[1];
|
||||
const payload = await JwtVerify(bearerToken);
|
||||
const dbUser = await getUserFromId(payload.sub)
|
||||
if (!dbUser || !dbUser.isAdmin) {
|
||||
log('MIDDLEWARE', 'ROLE', `Non admin ou éxistant. (${req.ip})`)
|
||||
return res
|
||||
.type('application/json')
|
||||
.status(403)
|
||||
.json({ error: 'Unauthorized' });
|
||||
}
|
||||
log('MIDDLEWARE', 'ROLE', `Accès admin validé. (${req.ip})`)
|
||||
next();
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
validateJWT,
|
||||
isAdmin
|
||||
};
|
||||
Reference in New Issue
Block a user