whitef0x0/tellform

View on GitHub
config/passport_helpers.js

Summary

Maintainability
A
1 hr
Test Coverage
'use strict';

var passport = require('passport');

module.exports.isAuthenticatedOrApiKey = function isAuthenticated(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    }
    // Try authenticate with API KEY
    if (req.headers.apikey || req.query.apikey || req.body.apikey) {
        passport.authenticate('localapikey', function (err, user, info) {
            if (err)
                return res.sendStatus(500);

            if (!user)
                return res.status(401).send(info.message || '');

            req.login(user, function(loginErr) {
                if (loginErr) return res.sendStatus(500);

                req.user = user;
                return next();
            });

        })(req, res, next);
    } else {
        return res.sendStatus(401);
    }
};


module.exports.hasRole = function hasRole(roleRequired) {
    if (!roleRequired) {
        throw new Error('Required role needs to be set');
    }

    return function(req, res, next) {
        return module.exports.isAuthenticated(req, res, function() {
            if (req.user && req.user.roles && req.user.roles.indexOf(roleRequired) !== -1){
                return next();
            }
            return res.sendStatus(403);
        });
    };
};

module.exports.hasAdminRole = function hasAdminRole() {
    return module.exports.hasRole('admin');
};