attempts at purlMiddleware - using server/index.js to set

session.userId so can properly handle access paths
This commit is contained in:
Tyler Renelle
2012-07-31 19:21:45 -04:00
parent 630a6bf9ce
commit 595ad960f3
4 changed files with 53 additions and 33 deletions

View File

@@ -19,17 +19,11 @@ helpers = require('./helpers');
helpers.viewHelpers(view); helpers.viewHelpers(view);
get('/:uidParam?', function(page, model, _arg) { get('/', function(page, model) {
var uidParam; var userId;
uidParam = _arg.uidParam; userId = model.get('_userId');
return model.fetch('users', function(err, users) { return model.fetch("users." + userId, function(err, user) {
var guid, newUser, task, user, userId, _i, _len, _ref1; var guid, newUser, task, _i, _len, _ref1;
if ((uidParam != null) && users.get(uidParam)) {
model.set('_userId', uidParam);
model.session.userId = uidParam;
}
userId = model.get('_userId');
user = users.get(userId);
if (user == null) { if (user == null) {
newUser = schema.userSchema; newUser = schema.userSchema;
_ref1 = content.defaultTasks; _ref1 = content.defaultTasks;
@@ -51,7 +45,7 @@ get('/:uidParam?', function(page, model, _arg) {
newUser.rewardIds.push(guid); newUser.rewardIds.push(guid);
} }
} }
users.set(userId, newUser); model.set("users." + userId, newUser);
} }
return getHabits(page, model, userId); return getHabits(page, model, userId);
}); });

View File

@@ -1,5 +1,6 @@
// Generated by CoffeeScript 1.3.3 // Generated by CoffeeScript 1.3.3
var ONE_YEAR, app, derby, express, expressApp, gzippo, http, mobileMiddleware, path, publicPath, racer, root, server, serverError, store; var ONE_YEAR, app, customMiddleware, derby, express, expressApp, gzippo, http, path, publicPath, racer, root, server, serverError, store,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
http = require('http'); http = require('http');
@@ -45,10 +46,30 @@ root = path.dirname(path.dirname(__dirname));
publicPath = path.join(root, 'public'); publicPath = path.join(root, 'public');
mobileMiddleware = function(req, res, next) { customMiddleware = function(req, res, next) {
var model; var acceptableUid, model, uidParam, _i, _results;
model = req.getModel(); model = req.getModel();
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')));
uidParam = req.url.split('/')[1];
acceptableUid = require('Guid').isGuid(uidParam) || (__indexOf.call((function() {
_results = [];
for (_i = 0; _i <= 40; _i++){ _results.push(_i); }
return _results;
}).apply(this), uidParam) >= 0);
if (acceptableUid && model.session.userId !== uidParam) {
model.fetch("users." + uidParam, function(err, user) {
console.log({
uidParam: uidParam,
split: req.url.split('/'),
err: err,
user: user
});
if (!user.get('id')) {
model.set('_userId', uidParam);
return model.session.userId = uidParam;
}
});
}
return next(); return next();
}; };
@@ -59,7 +80,7 @@ expressApp.use(express.favicon()).use(gzippo.staticGzip(publicPath, {
cookie: { cookie: {
maxAge: ONE_YEAR maxAge: ONE_YEAR
} }
})).use(store.modelMiddleware()).use(mobileMiddleware).use(app.router()).use(expressApp.router).use(serverError(root)); })).use(store.modelMiddleware()).use(customMiddleware).use(app.router()).use(expressApp.router).use(serverError(root));
expressApp.all('*', function(req) { expressApp.all('*', function(req) {
throw "404: " + req.url; throw "404: " + req.url;

View File

@@ -12,19 +12,13 @@ helpers.viewHelpers(view)
# ========== ROUTES ========== # ========== ROUTES ==========
get '/:uidParam?', (page, model, {uidParam}) -> get '/', (page, model) ->
model.fetch 'users', (err, users) -> # Current browser session
# The session middleware will assign a _userId automatically
userId = model.get '_userId'
# Previously saved session (eg, http://localhost/{guid}) (temporary solution until authentication built) model.fetch "users.#{userId}", (err, user) ->
if uidParam? and users.get(uidParam)
model.set '_userId', uidParam # set for this request
model.session.userId = uidParam # and for next requests
# Current browser session
# The session middleware will assign a _userId automatically
userId = model.get '_userId'
user = users.get(userId)
# Else, select a new userId and initialize user # Else, select a new userId and initialize user
unless user? unless user?
@@ -37,7 +31,7 @@ get '/:uidParam?', (page, model, {uidParam}) ->
when 'daily' then newUser.dailyIds.push guid when 'daily' then newUser.dailyIds.push guid
when 'todo' then newUser.todoIds.push guid when 'todo' then newUser.todoIds.push guid
when 'reward' then newUser.rewardIds.push guid when 'reward' then newUser.rewardIds.push guid
users.set userId, newUser model.set "users.#{userId}", newUser
# #TODO these *Access functions aren't being called, why? # #TODO these *Access functions aren't being called, why?
# model.store.accessControl = true # model.store.accessControl = true

View File

@@ -30,10 +30,21 @@ ONE_YEAR = 1000 * 60 * 60 * 24 * 365
root = path.dirname path.dirname __dirname root = path.dirname path.dirname __dirname
publicPath = path.join root, 'public' publicPath = path.join root, 'public'
# Custom request object middleware customMiddleware = (req, res, next) ->
mobileMiddleware = (req, res, next) -> # Setup for mobile-device customizations
model = req.getModel() model = req.getModel()
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')
# PURL pseudo-auth: 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 [0..40])
if acceptableUid and model.session.userId!=uidParam
model.fetch "users.#{uidParam}", (err, user) ->
console.log {uidParam:uidParam, split:req.url.split('/'), err:err, user:user}
unless user.get('id')
model.set '_userId', uidParam # set for this request
model.session.userId = uidParam # and for next requests
next() next()
expressApp expressApp
@@ -59,7 +70,7 @@ expressApp
.use(store.modelMiddleware()) .use(store.modelMiddleware())
# Middelware can be inserted after the modelMiddleware and before # Middelware can be inserted after the modelMiddleware and before
# the app router to pass server accessible data to a model # the app router to pass server accessible data to a model
.use(mobileMiddleware) .use(customMiddleware)
# Creates an express middleware from the app's routes # Creates an express middleware from the app's routes
.use(app.router()) .use(app.router())
.use(expressApp.router) .use(expressApp.router)