cleaned up webserver a bit, moved over authentication stuff into its own file, got rid of unused routes, user routes still need to be moved out but am waiting for baris to finish

v1.18.x
psychobunny 12 years ago
parent 5e901a76aa
commit a4e8f9e706

@ -67,7 +67,7 @@ var templates = {};
loadTemplates([ loadTemplates([
'header', 'footer', 'register', 'home', 'topic','account', 'category', 'users', 'accountedit', 'header', 'footer', 'register', 'home', 'topic','account', 'category', 'users', 'accountedit',
'login', 'reset', 'reset_code', 'account', 'login', 'reset', 'reset_code', 'account',
'confirm', 'confirm', '403',
'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext', 'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext',
'admin/index', 'admin/categories', 'admin/users', 'admin/topics', 'admin/settings', 'admin/themes', 'admin/twitter', 'admin/facebook', 'admin/gplus' 'admin/index', 'admin/categories', 'admin/users', 'admin/topics', 'admin/settings', 'admin/themes', 'admin/twitter', 'admin/facebook', 'admin/gplus'
]); ]);

@ -0,0 +1,157 @@
(function(Auth) {
var passport = require('passport'),
passportLocal = require('passport-local').Strategy,
passportTwitter = require('passport-twitter').Strategy,
passportGoogle = require('passport-google-oauth').OAuth2Strategy,
passportFacebook = require('passport-facebook').Strategy,
login_strategies = [],
user_module = require('./../user.js'),
config = require('./../../config.js');
passport.use(new passportLocal(function(user, password, next) {
user_module.loginViaLocal(user, password, function(login) {
if (login.status === 'ok') next(null, login.user);
else next(null, false, login);
});
}));
if (config.twitter && config.twitter.key && config.twitter.key.length > 0 && config.twitter.secret.length > 0) {
passport.use(new passportTwitter({
consumerKey: config.twitter.key,
consumerSecret: config.twitter.secret,
callbackURL: config.url + 'auth/twitter/callback'
}, function(token, tokenSecret, profile, done) {
user_module.loginViaTwitter(profile.id, profile.username, function(err, user) {
if (err) { return done(err); }
done(null, user);
});
}));
login_strategies.push('twitter');
}
if (config.google && config.google.id.length > 0 && config.google.secret.length > 0) {
passport.use(new passportGoogle({
clientID: config.google.id,
clientSecret: config.google.secret,
callbackURL: config.url + 'auth/google/callback'
}, function(accessToken, refreshToken, profile, done) {
user_module.loginViaGoogle(profile.id, profile.displayName, profile.emails[0].value, function(err, user) {
if (err) { return done(err); }
done(null, user);
});
}));
login_strategies.push('google');
}
if (config.facebook && config.facebook.app_id.length > 0 && config.facebook.secret.length > 0) {
passport.use(new passportFacebook({
clientID: config.facebook.app_id,
clientSecret: config.facebook.secret,
callbackURL: config.url + 'auth/facebook/callback'
}, function(accessToken, refreshToken, profile, done) {
user_module.loginViaFacebook(profile.id, profile.displayName, profile.emails[0].value, function(err, user) {
if (err) { return done(err); }
done(null, user);
});
}));
login_strategies.push('facebook');
}
passport.serializeUser(function(user, done) {
done(null, user.uid);
});
passport.deserializeUser(function(uid, done) {
done(null, {
uid: uid
});
});
Auth.initialize = function(app) {
app.use(passport.initialize());
app.use(passport.session());
}
Auth.get_login_strategies = function() {
return login_strategies;
}
Auth.create_routes = function(app) {
app.get('/logout', function(req, res) {
console.log('info: [Auth] Session ' + req.sessionID + ' logout (uid: ' + global.uid + ')');
user_module.logout(req.sessionID, function(logout) {
req.logout();
res.send(templates['header'] + templates['logout'] + templates['footer']);
});
});
if (login_strategies.indexOf('twitter') !== -1) {
app.get('/auth/twitter', passport.authenticate('twitter'));
app.get('/auth/twitter/callback', passport.authenticate('twitter', {
successRedirect: '/',
failureRedirect: '/login'
}));
}
if (login_strategies.indexOf('google') !== -1) {
app.get('/auth/google', passport.authenticate('google', { scope: 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email' }));
app.get('/auth/google/callback', passport.authenticate('google', {
successRedirect: '/',
failureRedirect: '/login'
}));
}
if (login_strategies.indexOf('facebook') !== -1) {
app.get('/auth/facebook', passport.authenticate('facebook', { scope: 'email' }));
app.get('/auth/facebook/callback', passport.authenticate('facebook', {
successRedirect: '/',
failureRedirect: '/login'
}));
}
app.get('/reset/:code', function(req, res) {
res.send(templates['header'] + templates['reset_code'].parse({ reset_code: req.params.code }) + templates['footer']);
});
app.get('/reset', function(req, res) {
res.send(templates['header'] + templates['reset'] + templates['footer']);
});
app.get('/register', function(req, res) {
res.send(templates['header'] + templates['register'] + templates['footer']);
});
app.post('/login', passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login'
}));
app.post('/register', function(req, res) {
user_module.create(req.body.username, req.body.password, req.body.email, function(err, uid) {
if (err === null) {
req.login({
uid: uid
}, function() {
res.redirect('/');
});
} else {
res.redirect('/register');
}
});
});
}
}(exports));

@ -6,77 +6,12 @@ var express = require('express'),
config = require('../config.js'), config = require('../config.js'),
redis = require('redis'), redis = require('redis'),
redisServer = redis.createClient(config.redis.port, config.redis.host, config.redis.options), redisServer = redis.createClient(config.redis.port, config.redis.host, config.redis.options),
passport = require('passport'),
passportLocal = require('passport-local').Strategy,
passportTwitter = require('passport-twitter').Strategy,
passportGoogle = require('passport-google-oauth').OAuth2Strategy,
passportFacebook = require('passport-facebook').Strategy,
user = require('./user.js'), user = require('./user.js'),
utils = require('./utils.js'), utils = require('./utils.js'),
admin = require('./routes/admin.js'), admin = require('./routes/admin.js'),
login_strategies = []; auth = require('./routes/authentication.js');
passport.use(new passportLocal(function(user, password, next) {
global.modules.user.loginViaLocal(user, password, function(login) {
if (login.status === 'ok') next(null, login.user);
else next(null, false, login);
});
}));
if (config.twitter && config.twitter.key && config.twitter.key.length > 0 && config.twitter.secret.length > 0) {
passport.use(new passportTwitter({
consumerKey: config.twitter.key,
consumerSecret: config.twitter.secret,
callbackURL: config.url + 'auth/twitter/callback'
}, function(token, tokenSecret, profile, done) {
global.modules.user.loginViaTwitter(profile.id, profile.username, function(err, user) {
if (err) { return done(err); }
done(null, user);
});
}));
login_strategies.push('twitter');
}
if (config.google && config.google.id.length > 0 && config.google.secret.length > 0) {
passport.use(new passportGoogle({
clientID: config.google.id,
clientSecret: config.google.secret,
callbackURL: config.url + 'auth/google/callback'
}, function(accessToken, refreshToken, profile, done) {
global.modules.user.loginViaGoogle(profile.id, profile.displayName, profile.emails[0].value, function(err, user) {
if (err) { return done(err); }
done(null, user);
});
}));
login_strategies.push('google');
}
if (config.facebook && config.facebook.app_id.length > 0 && config.facebook.secret.length > 0) {
passport.use(new passportFacebook({
clientID: config.facebook.app_id,
clientSecret: config.facebook.secret,
callbackURL: config.url + 'auth/facebook/callback'
}, function(accessToken, refreshToken, profile, done) {
global.modules.user.loginViaFacebook(profile.id, profile.displayName, profile.emails[0].value, function(err, user) {
if (err) { return done(err); }
done(null, user);
});
}));
login_strategies.push('facebook');
}
passport.serializeUser(function(user, done) {
done(null, user.uid);
});
passport.deserializeUser(function(uid, done) {
done(null, {
uid: uid
});
});
(function(app) { (function(app) {
var templates = global.templates; var templates = global.templates;
@ -96,8 +31,9 @@ passport.deserializeUser(function(uid, done) {
secret: config.secret, secret: config.secret,
key: 'express.sid' key: 'express.sid'
})); }));
app.use(passport.initialize());
app.use(passport.session()); auth.initialize(app);
app.use(function(req, res, next) { app.use(function(req, res, next) {
// Don't bother with session handling for API requests // Don't bother with session handling for API requests
if (/^\/api\//.test(req.url)) return next(); if (/^\/api\//.test(req.url)) return next();
@ -112,26 +48,19 @@ passport.deserializeUser(function(uid, done) {
next(); next();
}); });
// Dunno wtf this does auth.create_routes(app);
// app.use(express.logger({ format: '\x1b[1m:method\x1b[0m \x1b[33m:url\x1b[0m :response-time ms' })); admin.create_routes(app);
// Useful if you want to use app.put and app.delete (instead of app.post all the time)
// app.use(express.methodOverride());
app.get('/403', function(req, res) {
res.send(templates['header'] + templates['403'] + templates['footer']);
});
app.create_route = function(url, tpl) { // to remove
function create_route(url, tpl) { // to remove
return '<script>templates.ready(function(){ajaxify.go("' + url + '", null, "' + tpl + '");});</script>'; return '<script>templates.ready(function(){ajaxify.go("' + url + '", null, "' + tpl + '");});</script>';
} };
app.create_route = create_route;
// Basic Routes (entirely client-side parsed, goal is to move the rest of the crap in this file into this one section) // Basic Routes (entirely client-side parsed, goal is to move the rest of the crap in this file into this one section)
(function() { (function() {
var routes = ['', 'login', 'register', 'account', 'latest', 'popular', 'active']; var routes = ['', 'login', 'register', 'account', 'latest', 'popular', 'active', '403'];
for (var i=0, ii=routes.length; i<ii; i++) { for (var i=0, ii=routes.length; i<ii; i++) {
(function(route) { (function(route) {
@ -143,7 +72,7 @@ passport.deserializeUser(function(uid, done) {
return; return;
} }
res.send(templates['header'] + create_route(route) + templates['footer']); res.send(templates['header'] + app.create_route(route) + templates['footer']);
}); });
}(routes[i])); }(routes[i]));
} }
@ -164,13 +93,8 @@ passport.deserializeUser(function(uid, done) {
res.send(templates['header'] + '<script>templates.ready(function(){ajaxify.go("confirm/' + req.params.code + '");});</script>' + templates['footer']); res.send(templates['header'] + '<script>templates.ready(function(){ajaxify.go("confirm/' + req.params.code + '");});</script>' + templates['footer']);
}); });
admin.create_routes(app);
// These functions are called via ajax once the initial page is loaded to populate templates with data // These functions are called via ajax once the initial page is loaded to populate templates with data
function api_method(req, res) { function api_method(req, res) {
switch(req.params.method) { switch(req.params.method) {
case 'home' : case 'home' :
global.modules.categories.get(function(data) { global.modules.categories.get(function(data) {
@ -179,6 +103,7 @@ passport.deserializeUser(function(uid, done) {
break; break;
case 'login' : case 'login' :
var data = {}, var data = {},
login_strategies = auth.get_login_strategies(),
num_strategies = login_strategies.length; num_strategies = login_strategies.length;
if (num_strategies == 0) { if (num_strategies == 0) {
@ -270,71 +195,9 @@ passport.deserializeUser(function(uid, done) {
app.get('/api/:method/:id*', api_method); app.get('/api/:method/:id*', api_method);
app.post('/login', passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login'
}));
app.get('/logout', function(req, res) {
console.log('info: [Auth] Session ' + res.sessionID + ' logout (uid: ' + global.uid + ')');
global.modules.user.logout(req.sessionID, function(logout) {
req.logout();
res.send(templates['header'] + templates['logout'] + templates['footer']);
});
});
if (login_strategies.indexOf('twitter') !== -1) {
app.get('/auth/twitter', passport.authenticate('twitter'));
app.get('/auth/twitter/callback', passport.authenticate('twitter', {
successRedirect: '/',
failureRedirect: '/login'
}));
}
if (login_strategies.indexOf('google') !== -1) {
app.get('/auth/google', passport.authenticate('google', { scope: 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email' }));
app.get('/auth/google/callback', passport.authenticate('google', {
successRedirect: '/',
failureRedirect: '/login'
}));
}
if (login_strategies.indexOf('facebook') !== -1) {
app.get('/auth/facebook', passport.authenticate('facebook', { scope: 'email' }));
app.get('/auth/facebook/callback', passport.authenticate('facebook', {
successRedirect: '/',
failureRedirect: '/login'
}));
}
app.get('/reset/:code', function(req, res) {
res.send(templates['header'] + templates['reset_code'].parse({ reset_code: req.params.code }) + templates['footer']);
});
app.get('/reset', function(req, res) {
res.send(templates['header'] + templates['reset'] + templates['footer']);
});
app.get('/register', function(req, res) { // TODO move user related logic into another file vvvvvvvvvvvvvvvvvvvv
res.send(templates['header'] + templates['register'] + templates['footer']);
});
app.post('/register', function(req, res) {
global.modules.user.create(req.body.username, req.body.password, req.body.email, function(err, uid) {
if (err === null) {
req.login({
uid: uid
}, function() {
res.redirect('/');
});
} else {
res.redirect('/register');
}
});
});
app.post('/edituser', function(req, res){ app.post('/edituser', function(req, res){
@ -350,24 +213,6 @@ passport.deserializeUser(function(uid, done) {
}); });
app.get('/baristest', function(req, res) {
/*user.getUserField(req.user.uid, 'email', function(data) {
console.log(" I GOT FIELD " +data);
});*/
/* user.getUserData(req.user.uid, function(data) {
console.log(" USER DATA : " + JSON.stringify(data));
});*/
// user.getUserFields(req.user.uid, ['email','username'], function(data) {
/*user.getUserFields(req.user.uid, ['username','email'], function(data) {
console.log(" I GOT FIELDS " +JSON.stringify(data));
});*/
user.get_usernames_by_uids(["17","1"], function(data){
console.log("I GOT "+JSON.stringify(data));
});
});
//to baris, move this into account.js or sth later - just moved this out here for you to utilize client side tpl parsing //to baris, move this into account.js or sth later - just moved this out here for you to utilize client side tpl parsing
//I didn't want to change too much so you should probably sort out the params etc //I didn't want to change too much so you should probably sort out the params etc
function get_account_fn(req, res, callback) { function get_account_fn(req, res, callback) {
@ -421,7 +266,7 @@ passport.deserializeUser(function(uid, done) {
user.getUserList(function(data){ user.getUserList(function(data){
res.send(templates['header'] + create_route("users", "users") + templates['footer']); res.send(templates['header'] + app.create_route("users", "users") + templates['footer']);
}); });
@ -435,7 +280,7 @@ passport.deserializeUser(function(uid, done) {
user.getUserField(req.user.uid, 'username', function(username) { user.getUserField(req.user.uid, 'username', function(username) {
if(req.params.uid && username === req.params.uid) if(req.params.uid && username === req.params.uid)
res.send(templates['header'] + create_route('users/'+req.params.uid+'/edit','accountedit') + templates['footer']); res.send(templates['header'] + app.create_route('users/'+req.params.uid+'/edit','accountedit') + templates['footer']);
else else
return res.redirect('/403'); return res.redirect('/403');
}); });
@ -460,7 +305,7 @@ passport.deserializeUser(function(uid, done) {
user.getUserData(uid, function(data) { user.getUserData(uid, function(data) {
if(data) { if(data) {
res.send(templates['header'] + create_route('users/'+data.username, 'account') + templates['footer']); res.send(templates['header'] + app.create_route('users/'+data.username, 'account') + templates['footer']);
} }
else { else {
res.redirect('/403'); res.redirect('/403');
@ -469,11 +314,7 @@ passport.deserializeUser(function(uid, done) {
}); });
} }
// TODO move user related logic into another file ^^^^^^^^^^^^^^^^^^^^^^^
app.get('/test', function(req, res) {
global.modules.topics.delete(1, 1);
res.send();
});
}(WebServer)); }(WebServer));
server.listen(config.port); server.listen(config.port);

Loading…
Cancel
Save