2017-06-23 17:54:28 +00:00
|
|
|
'use strict';
|
2016-08-26 00:54:16 +00:00
|
|
|
|
2017-06-23 17:54:28 +00:00
|
|
|
var passport = require('passport');
|
2016-08-26 00:54:16 +00:00
|
|
|
|
|
|
|
module.exports.isAuthenticatedOrApiKey = function isAuthenticated(req, res, next) {
|
|
|
|
if (req.isAuthenticated()) {
|
|
|
|
return next();
|
2017-04-23 19:46:15 +00:00
|
|
|
}
|
2017-04-21 05:02:05 +00:00
|
|
|
// Try authenticate with API KEY
|
|
|
|
if (req.headers.apikey || req.query.apikey || req.body.apikey) {
|
2017-06-23 17:54:28 +00:00
|
|
|
passport.authenticate('localapikey', function (err, user, info) {
|
2017-04-21 05:02:05 +00:00
|
|
|
if (err)
|
|
|
|
return res.sendStatus(500);
|
|
|
|
|
|
|
|
if (!user)
|
2017-06-23 17:54:28 +00:00
|
|
|
return res.status(401).send(info.message || '');
|
2017-04-21 05:02:05 +00:00
|
|
|
|
|
|
|
req.login(user, function(loginErr) {
|
|
|
|
if (loginErr) return res.sendStatus(500);
|
|
|
|
|
|
|
|
req.user = user;
|
|
|
|
return next();
|
|
|
|
});
|
|
|
|
|
|
|
|
})(req, res, next);
|
2017-04-23 19:46:15 +00:00
|
|
|
} else {
|
|
|
|
return res.sendStatus(401);
|
|
|
|
}
|
2016-08-26 00:54:16 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
module.exports.hasRole = function hasRole(roleRequired) {
|
2017-04-21 05:02:05 +00:00
|
|
|
if (!roleRequired) {
|
2017-06-23 17:54:28 +00:00
|
|
|
throw new Error('Required role needs to be set');
|
2017-04-21 05:02:05 +00:00
|
|
|
}
|
2017-04-23 19:46:15 +00:00
|
|
|
|
2016-08-26 00:54:16 +00:00
|
|
|
return function(req, res, next) {
|
|
|
|
return module.exports.isAuthenticated(req, res, function() {
|
2017-04-21 05:02:05 +00:00
|
|
|
if (req.user && req.user.roles && req.user.roles.indexOf(roleRequired) !== -1){
|
|
|
|
return next();
|
|
|
|
}
|
|
|
|
return res.sendStatus(403);
|
2016-08-26 00:54:16 +00:00
|
|
|
});
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports.hasAdminRole = function hasAdminRole() {
|
2017-06-23 17:54:28 +00:00
|
|
|
return module.exports.hasRole('admin');
|
2016-08-26 00:54:16 +00:00
|
|
|
};
|
|
|
|
|