feat: add ci cd files dont edit those files
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
const jwt = require('jsonwebtoken')
|
||||
const User = require('./models/User');
|
||||
const {res500} = require('./plugins/controllersHelperFunctions');
|
||||
const Category = require('./models/Category');
|
||||
const Election = require('./models/Election');
|
||||
|
||||
const authentication = {
|
||||
// secret for generating jwt token
|
||||
secretKey: 'kyQa8pFI5BJnj7LCVPlSfoATTSZuS5DMSjgBPxQo2zkcdKnxKCPzWs1DEBgMfnXFsjgT0YWgqn8HgLLcmdIgSR6fSQpy6vchmY3kUSD564J',
|
||||
// check if just logged in (admin-or-user) (middleware)
|
||||
isLoggedIn: async function (req, res, next) {
|
||||
try {
|
||||
const token = req.headers.authorization?.replace(/^Bearer\s/, '');
|
||||
if (token) {
|
||||
// check if token is not destroyed
|
||||
var user = await User.findOne({token: token});
|
||||
|
||||
if (!user) {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
|
||||
if (!user.registration_done) {
|
||||
return res500(res, 'user is disable please contact to support');
|
||||
}
|
||||
|
||||
//verifies secret and checks if the token is expired
|
||||
try {
|
||||
var checkToken = await jwt.verify(user.token.replace(/^Bearer\s/, ''), authentication.secretKey);
|
||||
|
||||
if (!checkToken) {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
} catch (error) {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
|
||||
req.user = {
|
||||
_id: user._id,
|
||||
scope: user.scope,
|
||||
portals: user.portals,
|
||||
permissions: user.permissions,
|
||||
specialPermissions: user.specialPermissions,
|
||||
private: user.private
|
||||
};
|
||||
|
||||
return next();
|
||||
} else {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
} catch (error) {
|
||||
return res500(res, error.message);
|
||||
}
|
||||
},
|
||||
// check if admin logged in (middleware)
|
||||
isAdmin: async function (req, res, next) {
|
||||
/** if req.user exist find user and check scope */
|
||||
/** req.user send from isLoggedIn */
|
||||
try {
|
||||
if (req.user) {
|
||||
const scope = req.user.scope;
|
||||
|
||||
if (!scope.includes('admin')) {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
|
||||
return next()
|
||||
} else {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
} catch (error) {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
},
|
||||
// check if user has permission (middleware)
|
||||
hasPermission: (permission) => {
|
||||
return (req, res, next) => {
|
||||
if (req.user && req.user.permissions) {
|
||||
const permissions = req.user.permissions;
|
||||
if (permissions.includes('superAdmin')) {
|
||||
return next();
|
||||
}
|
||||
if (!permissions.includes(permission)) {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
} else {
|
||||
return next();
|
||||
}
|
||||
} else {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
}
|
||||
},
|
||||
// hasSpecPermission: () => {
|
||||
// return async (req, res, next) => {
|
||||
// if (req.user && req.user.specialPermissions.length) {
|
||||
// const specialPermissions = req.user.specialPermissions;
|
||||
// if (req.user.permissions.includes('superAdmin')) {
|
||||
// return next();
|
||||
// }
|
||||
// let tempSpec = [];
|
||||
// for (const spec of specialPermissions) {
|
||||
// const check = await Category.findById(spec);
|
||||
//
|
||||
// if (check){
|
||||
// tempSpec.push(check._id);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (tempSpec.length){
|
||||
// req.user.allSpecialPermissions = tempSpec;
|
||||
// next();
|
||||
// }else {
|
||||
// return res.status(401).json({message: 'unauthorized'});
|
||||
// }
|
||||
// } else {
|
||||
// return next();
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
hasSubPermission: () => {
|
||||
return (req, res, next, value) => {
|
||||
if (req.user && req.user.permissions) {
|
||||
var permissions = req.user.permissions;
|
||||
if (permissions.includes('superAdmin')) {
|
||||
return next();
|
||||
}
|
||||
if (!permissions.some(item => new RegExp(value, 'i').test(item))) {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
} else {
|
||||
return next();
|
||||
}
|
||||
} else {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
}
|
||||
},
|
||||
isVoter: async function (req, res, next) {
|
||||
try {
|
||||
const token = req.headers.authorization?.replace(/^Bearer\s/, '');
|
||||
if (token) {
|
||||
// check if token is not destroyed
|
||||
const user = await Election.findOne({'voters': {$elemMatch: {_id: token}}});
|
||||
|
||||
if (!user) {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
|
||||
const voter = user.voters.id(token);
|
||||
|
||||
req.voter = {
|
||||
_id: voter._id,
|
||||
username: voter.username,
|
||||
password: voter.password,
|
||||
voted: voter.voted
|
||||
};
|
||||
|
||||
return next();
|
||||
} else {
|
||||
return res.status(401).json({message: 'unauthorized'});
|
||||
}
|
||||
} catch (error) {
|
||||
return res500(res, error.message);
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
module.exports = authentication
|
||||
Reference in New Issue
Block a user