- Initial commit... A DB, some routes, and basic authentication routines...

This commit is contained in:
2019-07-04 16:19:30 -04:00
commit d9a2d33913
32 changed files with 3465 additions and 0 deletions

82
strategies/auth/index.js Normal file
View File

@@ -0,0 +1,82 @@
const createRequestUserObject = (req, user) => ({
isGuest: !(user && user.id),
isManager: user && user.isEventManager(),
isSelf: user && user.id === req.params.user_id,
record: user || null,
});
const authenticateBasic = (passport) => (req, res, next) => (
passport.authenticate('jwt', { session: false }, (err, user, info) => {
if (err) {
next(err);
}
req.user = createRequestUserObject(req, user);
next();
})(req, res, next)
);
const authenticateEventManager = (passport) => (req, res, next) => (
passport.authenticate('jwt', { session: false }, (err, user, info) => {
if (err) {
next(err);
}
const record = createRequestUserObject(req, user);
if (!user || !record.isManager) {
return res.send(401);
}
req.user = record;
next();
})(req, res, next)
);
const authenticateEventManagerOrSelf = (passport) => (req, res, next) => (
passport.authenticate('jwt', { session: false }, (err, user, info) => {
if (err) {
next(err);
}
const record = createRequestUserObject(req, user);
if (user && (!record.isManager && !record.isSelf)) {
return res.send(401);
}
req.user = record;
next();
})(req, res, next)
);
const authenticateSecure = (passport) => (req, res, next) => (
passport.authenticate('jwt', { session: false }, (err, user, info) => {
if (err) {
next(err);
}
if (!user) {
return res.send(401);
}
req.user = createRequestUserObject(req, user);
next();
})(req, res, next)
);
module.exports = function (passport) {
require('./apple.js')(passport);
require('./facebook.js')(passport);
require('./google.js')(passport);
require('./jwt.js')(passport);
require('./local.js')(passport);
return {
basic: authenticateBasic(passport),
manager: authenticateEventManager(passport),
managerOrSelf: authenticateEventManagerOrSelf(passport),
passport,
secure: authenticateSecure(passport),
};
};