all files / src/routes/ authentication.js

18.42% Statements 7/38
0% Branches 0/16
11.11% Functions 1/9
18.42% Lines 7/38
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88                                                                                                                                                                  
(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('/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));