mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
attempts at purlMiddleware - using server/index.js to set
session.userId so can properly handle access paths
This commit is contained in:
@@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user