create logs page
This commit is contained in:
+159
-152
@@ -1,166 +1,173 @@
|
||||
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 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) {
|
||||
// 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 {
|
||||
const token = req.headers.authorization?.replace(/^Bearer\s/, '');
|
||||
if (token) {
|
||||
// check if token is not destroyed
|
||||
var user = await User.findOne({token: token});
|
||||
var checkToken = await jwt.verify(
|
||||
user.token.replace(/^Bearer\s/, ""),
|
||||
authentication.secretKey
|
||||
);
|
||||
|
||||
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'});
|
||||
}
|
||||
if (!checkToken) {
|
||||
return res.status(401).json({ message: "unauthorized" });
|
||||
}
|
||||
} catch (error) {
|
||||
return res500(res, error.message);
|
||||
return res.status(401).json({ message: "unauthorized" });
|
||||
}
|
||||
},
|
||||
// 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'});
|
||||
}
|
||||
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 res.status(401).json({message: 'unauthorized'});
|
||||
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" });
|
||||
}
|
||||
},
|
||||
// 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'});
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
},
|
||||
// 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'});
|
||||
}
|
||||
if (!permissions.includes(permission)) {
|
||||
return res.status(401).json({ message: "unauthorized" });
|
||||
} else {
|
||||
return next();
|
||||
}
|
||||
},
|
||||
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}}});
|
||||
} 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();
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
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);
|
||||
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 } },
|
||||
});
|
||||
|
||||
module.exports = authentication
|
||||
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;
|
||||
|
||||
@@ -34,7 +34,7 @@ module.exports.getAdminLoginLogs = [
|
||||
try {
|
||||
const {
|
||||
page = 1,
|
||||
limit = 1000,
|
||||
limit = 10,
|
||||
sort = "desc",
|
||||
fromDate,
|
||||
toDate,
|
||||
|
||||
+50
-48
@@ -1,77 +1,79 @@
|
||||
const mongoose = require('mongoose');
|
||||
const mongoose = require("mongoose");
|
||||
|
||||
function autoPopulateSubs(next) {
|
||||
this.populate({
|
||||
path: 'childs',
|
||||
select: 'title childs navIndex url modelType treeCat parent defaultPageType',
|
||||
options:{
|
||||
sort : 'navIndex'
|
||||
}
|
||||
path: "childs",
|
||||
select:
|
||||
"title childs navIndex url modelType treeCat parent defaultPageType",
|
||||
options: {
|
||||
sort: "navIndex",
|
||||
},
|
||||
// sort: {navIndex: -1},
|
||||
});
|
||||
next();
|
||||
}
|
||||
|
||||
function file(file) {
|
||||
return '/uploads/files/terms/' + file
|
||||
return "/uploads/files/terms/" + file;
|
||||
}
|
||||
|
||||
function image(img) {
|
||||
if (img) return '/uploads/images/category/' + img
|
||||
else return '/img/no-cover.jpg'
|
||||
if (img) return "/uploads/images/category/" + img;
|
||||
else return "/img/no-cover.jpg";
|
||||
}
|
||||
|
||||
const CategoryTermsFile = mongoose.Schema({
|
||||
file: {type: String, get: file},
|
||||
title: String
|
||||
})
|
||||
|
||||
file: { type: String, get: file },
|
||||
title: String,
|
||||
});
|
||||
|
||||
const CategorySchema = mongoose.Schema({
|
||||
title: String,
|
||||
parent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category', default: null},
|
||||
childs: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}],
|
||||
treeCat: [{type: mongoose.Schema.Types.ObjectId, ref: 'Category'}],
|
||||
rootParent: {type: mongoose.Schema.Types.ObjectId, ref: 'Category'},
|
||||
priority: {type: Number, default: 0},
|
||||
parent: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: "Category",
|
||||
default: null,
|
||||
},
|
||||
childs: [{ type: mongoose.Schema.Types.ObjectId, ref: "Category" }],
|
||||
treeCat: [{ type: mongoose.Schema.Types.ObjectId, ref: "Category" }],
|
||||
rootParent: { type: mongoose.Schema.Types.ObjectId, ref: "Category" },
|
||||
priority: { type: Number, default: 0 },
|
||||
showInMenu: Boolean,
|
||||
navIndex: {type: Number, default: null},
|
||||
news: {type: Boolean, default: true},
|
||||
child: {type: Boolean, default: true},
|
||||
special: {type: Boolean, default: false},
|
||||
allowComment: {type: Boolean, default: false},
|
||||
level: {type: Number, default: 1},
|
||||
siteMap: {type: Boolean, default: true},
|
||||
navIndex: { type: Number, default: null },
|
||||
news: { type: Boolean, default: true },
|
||||
child: { type: Boolean, default: true },
|
||||
special: { type: Boolean, default: false },
|
||||
allowComment: { type: Boolean, default: false },
|
||||
level: { type: Number, default: 1 },
|
||||
siteMap: { type: Boolean, default: true },
|
||||
modelType: String,
|
||||
_creator: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
|
||||
_updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
|
||||
haveNews: {type: Boolean, default: false},
|
||||
_creator: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
|
||||
_updatedBy: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
|
||||
haveNews: { type: Boolean, default: false },
|
||||
///// for client
|
||||
hasNewsTab: {type: Boolean, default: true},
|
||||
hasContentTab: {type: Boolean, default: true},
|
||||
hasMediaTab: {type: Boolean, default: true},
|
||||
hasSubMenusTab: {type: Boolean, default: true},
|
||||
hasTermsTab: {type: Boolean, default: true},
|
||||
hasNotificationsTab: {type: Boolean, default: true},
|
||||
hasSpecNewsTab: {type: Boolean, default: true},
|
||||
hasNazarTab: {type: Boolean, default: true},
|
||||
hasNewsFileTab: {type: Boolean, default: true},
|
||||
defaultPageType: {type: String, default: 'news'},
|
||||
hasNewsTab: { type: Boolean, default: true },
|
||||
hasContentTab: { type: Boolean, default: true },
|
||||
hasMediaTab: { type: Boolean, default: true },
|
||||
hasSubMenusTab: { type: Boolean, default: true },
|
||||
hasTermsTab: { type: Boolean, default: true },
|
||||
hasNotificationsTab: { type: Boolean, default: true },
|
||||
hasSpecNewsTab: { type: Boolean, default: true },
|
||||
hasNazarTab: { type: Boolean, default: true },
|
||||
hasNewsFileTab: { type: Boolean, default: true },
|
||||
defaultPageType: { type: String, default: "news" },
|
||||
/** page */
|
||||
showInFooter: {type: Number, enum: [0, 1, 2, 3], default: 0},
|
||||
url: {type: String, default: null},
|
||||
showInFooter: { type: Number, enum: [0, 1, 2, 3], default: 0 },
|
||||
url: { type: String, default: null },
|
||||
pageContent: String,
|
||||
terms: [CategoryTermsFile],
|
||||
hasManagerInfo: {type: Boolean, default: true},
|
||||
managerCover: {type: String, get: image},
|
||||
hasManagerInfo: { type: Boolean, default: true },
|
||||
managerCover: { type: String, get: image },
|
||||
managerName: String,
|
||||
managerDescription: String
|
||||
managerDescription: String,
|
||||
});
|
||||
|
||||
CategorySchema.index({parent: 1, childs: 1});
|
||||
CategorySchema.index({ parent: 1, childs: 1 });
|
||||
|
||||
CategorySchema
|
||||
.pre('findOne', autoPopulateSubs)
|
||||
.pre('find', autoPopulateSubs);
|
||||
CategorySchema.pre("findOne", autoPopulateSubs).pre("find", autoPopulateSubs);
|
||||
|
||||
module.exports = mongoose.model('Category', CategorySchema);
|
||||
module.exports = mongoose.model("Category", CategorySchema);
|
||||
|
||||
@@ -28,7 +28,6 @@ module.exports.sms = async (phoneNumber, message) => {
|
||||
SendDateTime: "",
|
||||
CanContinueInCaseOfError: "false",
|
||||
};
|
||||
|
||||
const response = await axios.post(
|
||||
`http://RestfulSms.com/api/MessageSend`,
|
||||
data,
|
||||
@@ -39,6 +38,7 @@ module.exports.sms = async (phoneNumber, message) => {
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
return response.data;
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
|
||||
Reference in New Issue
Block a user