(function(Auth) { "use strict"; var passport = require('passport'), passportLocal = require('passport-local').Strategy, nconf = require('nconf'), winston = require('winston'), express = require('express'), controllers = require('../controllers'), plugins = require('../plugins'), hotswap = require('../hotswap'), loginStrategies = []; Auth.initialize = function(app, middleware) { app.use(passport.initialize()); app.use(passport.session()); app.use(function(req, res, next) { req.uid = req.user ? parseInt(req.user.uid, 10) : 0; next(); }); Auth.app = app; Auth.middleware = middleware; }; Auth.getLoginStrategies = function() { return loginStrategies; }; Auth.reloadRoutes = function(callback) { var router = express.Router(); router.hotswapId = 'auth'; loginStrategies.length = 0; if (plugins.hasListeners('action:auth.overrideLogin')) { winston.warn('[authentication] Login override detected, skipping local login strategy.'); plugins.fireHook('action:auth.overrideLogin'); } else { passport.use(new passportLocal({passReqToCallback: true}, controllers.authentication.localLogin)); } plugins.fireHook('filter:auth.init', loginStrategies, function(err) { if (err) { winston.error('filter:auth.init - plugin failure'); return callback(err); } loginStrategies.forEach(function(strategy) { if (strategy.url) { router.get(strategy.url, passport.authenticate(strategy.name, { scope: strategy.scope, prompt: strategy.prompt || undefined })); } router.get(strategy.callbackURL, passport.authenticate(strategy.name, { successReturnToOrRedirect: nconf.get('relative_path') + (strategy.successUrl !== undefined ? strategy.successUrl : '/'), failureRedirect: nconf.get('relative_path') + (strategy.failureUrl !== undefined ? strategy.failureUrl : '/login') })); }); router.post('/register', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.register); router.post('/register/complete', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.registerComplete); router.get('/register/abort', controllers.authentication.registerAbort); router.post('/login', Auth.middleware.applyCSRF, Auth.middleware.applyBlacklist, controllers.authentication.login); router.post('/logout', Auth.middleware.applyCSRF, controllers.authentication.logout); hotswap.replace('auth', router); if (typeof callback === 'function') { callback(); } }); }; passport.serializeUser(function(user, done) { done(null, user.uid); }); passport.deserializeUser(function(uid, done) { done(null, { uid: uid }); }); }(exports));