diff --git a/src/routes/authentication.js b/src/routes/authentication.js index 6024291adb..b2ffd4f73d 100644 --- a/src/routes/authentication.js +++ b/src/routes/authentication.js @@ -14,15 +14,76 @@ login_strategies = []; - plugins.ready(function() { - plugins.fireHook('filter:auth.init', login_strategies, function(err) { + + function logout(req, res) { + if (req.user && parseInt(req.user.uid, 10) > 0) { + winston.info('[Auth] Session ' + req.sessionID + ' logout (uid: ' + req.user.uid + ')'); + + var ws = require('../socket.io'); + ws.logoutUser(req.user.uid); + + req.logout(); + } + + res.send(200); + } + + function login(req, res, next) { + passport.authenticate('local', function(err, userData, info) { if (err) { - winston.error('filter:auth.init - plugin failure'); + return next(err); + } + + if (!userData) { + return res.json(403, info); } - Auth.createRoutes(Auth.app); + // Alter user cookie depending on passed-in option + if (req.body.remember === 'true') { + var duration = 1000*60*60*24*parseInt(meta.configs.loginDays || 14, 10); + req.session.cookie.maxAge = duration; + req.session.cookie.expires = new Date(Date.now() + duration); + } else { + req.session.cookie.maxAge = false; + req.session.cookie.expires = false; + } + + req.login({ + uid: userData.uid + }, function() { + if (userData.uid) { + user.logIP(userData.uid, req.ip); + } + + res.json(200, info); + }); + })(req, res, next); + } + + function register(req, res) { + if(meta.config.allowRegistration !== undefined && parseInt(meta.config.allowRegistration, 10) === 0) { + return res.send(403); + } + + user.create({username: req.body.username, password: req.body.password, email: req.body.email, ip: req.ip}, function(err, uid) { + if (err === null && uid) { + req.login({ + uid: uid + }, function() { + + require('../socket.io').emitUserCount(); + + if(req.body.referrer) { + res.redirect(req.body.referrer); + } else { + res.redirect(nconf.get('relative_path') + '/'); + } + }); + } else { + res.redirect(nconf.get('relative_path') + '/register'); + } }); - }); + } Auth.initialize = function(app) { app.use(passport.initialize()); @@ -38,88 +99,30 @@ Auth.app = app; }; - Auth.createRoutes = function(app) { - app.post('/logout', function(req, res) { - if (req.user && parseInt(req.user.uid, 10) > 0) { - winston.info('[Auth] Session ' + req.sessionID + ' logout (uid: ' + req.user.uid + ')'); - - var ws = require('../socket.io'); - ws.logoutUser(req.user.uid); - - req.logout(); - } - - res.send(200); - }); - - for (var i in login_strategies) { - if (login_strategies.hasOwnProperty(i)) { - var strategy = login_strategies[i]; - app.get(strategy.url, passport.authenticate(strategy.name, { - scope: strategy.scope - })); - - app.get(strategy.callbackURL, passport.authenticate(strategy.name, { - successRedirect: '/', - failureRedirect: '/login' - })); - } - } - - app.post('/login', function(req, res, next) { - passport.authenticate('local', function(err, userData, info) { + Auth.createRoutes = function(app, middleware, controllers) { + plugins.ready(function() { + plugins.fireHook('filter:auth.init', login_strategies, function(err) { if (err) { - return next(err); - } - - if (!userData) { - return res.json(403, info); + winston.error('filter:auth.init - plugin failure'); } - // Alter user cookie depending on passed-in option - if (req.body.remember === 'true') { - var duration = 1000*60*60*24*parseInt(meta.configs.loginDays || 14, 10); - req.session.cookie.maxAge = duration; - req.session.cookie.expires = new Date(Date.now() + duration); - } else { - req.session.cookie.maxAge = false; - req.session.cookie.expires = false; - } - - req.login({ - uid: userData.uid - }, function() { - if (userData.uid) { - user.logIP(userData.uid, req.ip); + for (var i in login_strategies) { + if (login_strategies.hasOwnProperty(i)) { + var strategy = login_strategies[i]; + app.get(strategy.url, passport.authenticate(strategy.name, { + scope: strategy.scope + })); + + app.get(strategy.callbackURL, passport.authenticate(strategy.name, { + successRedirect: '/', + failureRedirect: '/login' + })); } - - res.json(200, info); - }); - })(req, res, next); - }); - - app.post('/register', function(req, res) { - if(meta.config.allowRegistration !== undefined && parseInt(meta.config.allowRegistration, 10) === 0) { - return res.send(403); - } - - user.create({username: req.body.username, password: req.body.password, email: req.body.email, ip: req.ip}, function(err, uid) { - if (err === null && uid) { - req.login({ - uid: uid - }, function() { - - require('../socket.io').emitUserCount(); - - if(req.body.referrer) { - res.redirect(req.body.referrer); - } else { - res.redirect(nconf.get('relative_path') + '/'); - } - }); - } else { - res.redirect(nconf.get('relative_path') + '/register'); } + + app.post('/logout', logout); + app.post('/login', login); + app.post('/register', register); }); }); }; diff --git a/src/routes/index.js b/src/routes/index.js index bb7fa5b6b1..bdb3c2323d 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -9,7 +9,8 @@ var nconf = require('nconf'), apiRoutes = require('./api'), adminRoutes = require('./admin'), feedRoutes = require('./feeds'), - pluginRoutes = require('./plugins'); + pluginRoutes = require('./plugins'), + authRoutes = require('./authentication'); @@ -129,6 +130,7 @@ module.exports = function(app, middleware) { apiRoutes(app, middleware, controllers); feedRoutes(app, middleware, controllers); pluginRoutes(app, middleware, controllers); + authRoutes.createRoutes(app, middleware, controllers); /** * Every view has an associated API route.