Move purl authentication to server/index.js and don't redirect. keep

them on that url
This commit is contained in:
Tyler Renelle
2012-08-26 16:02:33 -04:00
parent 0e4e306046
commit b711ccfc03
4 changed files with 21 additions and 22 deletions

View File

@@ -20,13 +20,8 @@ helpers = require('./helpers');
helpers.viewHelpers(view); helpers.viewHelpers(view);
get('/:uidParam?', function(page, model, _arg) { get('/:uidParam?', function(page, model, _arg) {
var acceptableUid, uidParam, userId; var uidParam, userId;
uidParam = _arg.uidParam; uidParam = _arg.uidParam;
acceptableUid = require('guid').isGuid(uidParam) || (uidParam === '3' || uidParam === '9');
if (acceptableUid) {
model.session.userId = uidParam;
return page.redirect('/');
}
userId = model.get('_userId'); userId = model.get('_userId');
return model.subscribe("users." + userId, function(err, user) { return model.subscribe("users." + userId, function(err, user) {
var guid, newUser, task, _i, _len, _ref1; var guid, newUser, task, _i, _len, _ref1;

View File

@@ -47,10 +47,15 @@ root = path.dirname(path.dirname(__dirname));
publicPath = path.join(root, 'public'); publicPath = path.join(root, 'public');
habitrpgMiddleware = function(req, res, next) { habitrpgMiddleware = function(req, res, next) {
var model, _base; var acceptableUid, model, uidParam, _base;
model = req.getModel(); model = req.getModel();
(_base = req.session).userId || (_base.userId = derby.uuid()); (_base = req.session).userId || (_base.userId = derby.uuid());
model.setNull('_userId', req.session.userId); uidParam = req.url.split('/')[1];
acceptableUid = require('guid').isGuid(uidParam) || (uidParam === '3' || uidParam === '9');
if (acceptableUid && req.session.userId !== uidParam) {
req.session.userId = uidParam;
}
model.set('_userId', req.session.userId);
model.set('_mobileDevice', /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header('User-Agent'))); model.set('_mobileDevice', /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header('User-Agent')));
model.set('_nodeEnv', process.env.NODE_ENV); model.set('_nodeEnv', process.env.NODE_ENV);
require('./setupStore').accessControl(store); require('./setupStore').accessControl(store);

View File

@@ -16,15 +16,6 @@ helpers.viewHelpers(view)
get '/:uidParam?', (page, model, {uidParam}) -> get '/:uidParam?', (page, model, {uidParam}) ->
# PURL pseudo-auth: Previously saved session (eg, http://localhost/{guid}) (temporary solution until authentication built)
acceptableUid = require('guid').isGuid(uidParam) or (uidParam in ['3','9'])
if acceptableUid# && model.session.userId!=uidParam
# model.fetch "users.#{uidParam}", (err, user) -> #test whether user exists
# if user.get('id')
model.session.userId = uidParam
return page.redirect('/')
# The session middleware will assign a _userId automatically
userId = model.get '_userId' userId = model.get '_userId'
model.subscribe "users.#{userId}", (err, user) -> model.subscribe "users.#{userId}", (err, user) ->

View File

@@ -32,16 +32,24 @@ publicPath = path.join root, 'public'
habitrpgMiddleware = (req, res, next) -> habitrpgMiddleware = (req, res, next) ->
model = req.getModel() model = req.getModel()
# chat userId is no longer auto-created by session middleware ## PURL authentication
req.session.userId ||= derby.uuid() # Setup userId for new users
model.setNull('_userId', req.session.userId) req.session.userId ||= derby.uuid()
# Previously saved session (eg, http://localhost/{guid}) (temporary solution until authentication built)
uidParam = req.url.split('/')[1]
acceptableUid = require('guid').isGuid(uidParam) or (uidParam in ['3','9'])
if acceptableUid && req.session.userId!=uidParam
# TODO test whether user exists: ```model.fetch("users.#{uidParam}", function(err,user){if(user.get(..){})}})```, but doesn't seem to work
req.session.userId = uidParam
model.set '_userId', req.session.userId
# set _mobileDevice to true or false so view can exclude portions from mobile device ## Set _mobileDevice to true or false so view can exclude portions from mobile device
model.set '_mobileDevice', /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header 'User-Agent') model.set '_mobileDevice', /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header 'User-Agent')
# same for production/development ## Same for production/development
model.set '_nodeEnv', process.env.NODE_ENV model.set '_nodeEnv', process.env.NODE_ENV
## Setup access control
require('./setupStore').accessControl(store) require('./setupStore').accessControl(store)
next() next()