diff --git a/lib/app/index.js b/lib/app/index.js index c1989e236a..7127b99fc6 100644 --- a/lib/app/index.js +++ b/lib/app/index.js @@ -19,17 +19,11 @@ helpers = require('./helpers'); helpers.viewHelpers(view); -get('/:uidParam?', function(page, model, _arg) { - var uidParam; - uidParam = _arg.uidParam; - return model.fetch('users', function(err, users) { - var guid, newUser, task, user, userId, _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); +get('/', function(page, model) { + var userId; + userId = model.get('_userId'); + return model.fetch("users." + userId, function(err, user) { + var guid, newUser, task, _i, _len, _ref1; if (user == null) { newUser = schema.userSchema; _ref1 = content.defaultTasks; @@ -51,7 +45,7 @@ get('/:uidParam?', function(page, model, _arg) { newUser.rewardIds.push(guid); } } - users.set(userId, newUser); + model.set("users." + userId, newUser); } return getHabits(page, model, userId); }); diff --git a/lib/server/index.js b/lib/server/index.js index 6f84cd6cac..30870ecf82 100644 --- a/lib/server/index.js +++ b/lib/server/index.js @@ -1,5 +1,6 @@ // 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'); @@ -45,10 +46,30 @@ root = path.dirname(path.dirname(__dirname)); publicPath = path.join(root, 'public'); -mobileMiddleware = function(req, res, next) { - var model; +customMiddleware = function(req, res, next) { + var acceptableUid, model, uidParam, _i, _results; model = req.getModel(); 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(); }; @@ -59,7 +80,7 @@ expressApp.use(express.favicon()).use(gzippo.staticGzip(publicPath, { cookie: { 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) { throw "404: " + req.url; diff --git a/src/app/index.coffee b/src/app/index.coffee index c203e14336..91c582633f 100644 --- a/src/app/index.coffee +++ b/src/app/index.coffee @@ -12,19 +12,13 @@ helpers.viewHelpers(view) # ========== ROUTES ========== -get '/:uidParam?', (page, model, {uidParam}) -> +get '/', (page, model) -> - model.fetch 'users', (err, users) -> - - # Previously saved session (eg, http://localhost/{guid}) (temporary solution until authentication built) - 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) + # Current browser session + # The session middleware will assign a _userId automatically + userId = model.get '_userId' + + model.fetch "users.#{userId}", (err, user) -> # Else, select a new userId and initialize user unless user? @@ -37,7 +31,7 @@ get '/:uidParam?', (page, model, {uidParam}) -> when 'daily' then newUser.dailyIds.push guid when 'todo' then newUser.todoIds.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? # model.store.accessControl = true diff --git a/src/server/index.coffee b/src/server/index.coffee index 94f41a2cda..6e562cbd0e 100644 --- a/src/server/index.coffee +++ b/src/server/index.coffee @@ -30,12 +30,23 @@ ONE_YEAR = 1000 * 60 * 60 * 24 * 365 root = path.dirname path.dirname __dirname publicPath = path.join root, 'public' -# Custom request object middleware -mobileMiddleware = (req, res, next) -> +customMiddleware = (req, res, next) -> + # Setup for mobile-device customizations model = req.getModel() model.set '_mobileDevice', /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header 'User-Agent') - next() + # 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() + expressApp .use(express.favicon()) # Gzip static files and serve from memory @@ -59,7 +70,7 @@ expressApp .use(store.modelMiddleware()) # Middelware can be inserted after the modelMiddleware and before # the app router to pass server accessible data to a model - .use(mobileMiddleware) + .use(customMiddleware) # Creates an express middleware from the app's routes .use(app.router()) .use(expressApp.router)