oils-plugin-auth
Version:
Oils js authentication plugin using passport js.
72 lines (54 loc) • 1.67 kB
JavaScript
;
exports.handleLogin = function(req, res, next) {
if (req.isAuthenticated()) { return next(); }
req.flash('error', 'Login required.');
res.redirect('/login?r=' + encodeURIComponent(req.url));
}
exports.handleRole = function(role, req, res, next) {
let isLoggedIn = req.isAuthenticated();
if (!(role instanceof Array)) {
role = [role];
}
if (isLoggedIn && hasRole(role, req.user.role)) { return next(); }
let message;
if (isLoggedIn) {
message = 'You have no access to this page.';
} else {
message = 'Please login to access this page.';
}
req.flash('error', message);
res.redirect('/login?r=' + encodeURIComponent(req.url));
}
exports.handleRoleMidddleware = function(role, redirUrl) {
return function(req, res, next) {
let isLoggedIn = req.isAuthenticated();
if (!(role instanceof Array)) {
role = [role];
}
if (isLoggedIn && hasRole(role, req.user.role)) {
return next();
}
if (isLoggedIn) {
console.warn("Unauthorized access", req._user.username);
req.flash('error', "You don't have access to the page.");
}
redirUrl = redirUrl || '/login';
res.redirect(redirUrl);
}
}
function hasRole(roles, role) {
for (let i in roles) {
if (roles[i] == role) {
return true;
}
}
return false;
}
exports.handleAdmin = function(req, res, next) {
if (exports.isAdmin(req)) { return next(); }
req.flash('error', 'Administrator role is required to access this function.');
res.redirect('/login?r=' + encodeURIComponent(req.url));
}
exports.isAdmin = function(req) {
return req.isAuthenticated() && req.user.role == 'ADMIN';
}