diff --git a/src/app/index.coffee b/src/app/index.coffee index 2c2f3340ca..55ebf7cc2f 100644 --- a/src/app/index.coffee +++ b/src/app/index.coffee @@ -23,7 +23,7 @@ _ = require('underscore') # ========== ROUTES ========== -get '/', (page, model, next) -> +get '/', (page, model, params, next) -> return page.redirect '/' if page.params?.query?.play? # temporary view variables, so we don't call model.set() too fast @@ -34,7 +34,7 @@ get '/', (page, model, next) -> #if req.headers['x-forwarded-proto']!='https' and process.env.NODE_ENV=='production' # return page.redirect 'https://' + req.headers.host + req.url - party.partySubscribe model, -> + party.partySubscribe page, model, params, next, -> character.updateUser(model) items.server(model) model.set '_view', _view diff --git a/src/app/party.coffee b/src/app/party.coffee index 0284d2444d..268214bb47 100644 --- a/src/app/party.coffee +++ b/src/app/party.coffee @@ -17,7 +17,7 @@ partyUnsubscribe = (model, cb) -> 2) If in a an empty party, just subscribe to the user & party meta. 3) If full party, subscribe to everything. ### -module.exports.partySubscribe = partySubscribe = (model, cb) -> +module.exports.partySubscribe = partySubscribe = (page, model, params, next, cb) -> # unsubscribe from everything - we're starting over # partyUnsubscribe model, -> @@ -25,10 +25,15 @@ module.exports.partySubscribe = partySubscribe = (model, cb) -> # Restart subscription to the main user selfQ = model.query('users').withId model.get('_userId') #or model.session.userId # see http://goo.gl/TPYIt selfQ.subscribe (err, self) -> - throw err if err + return next(err) if err u = self.at(0) uObj = u.get() + # Attempted handling for 'party of undefined' error, which is caused by bustedSession (see derby-auth). + # Theoretically simply reloading the page should restore model.at('_userId') and the second load should work just fine + # bustedSession victims might hit a redirection loop if I'm wrong :/ + return page.redirect('/') unless uObj + ## (1) User is solo, just return that subscription unless uObj.party?.current? model.ref '_user', u @@ -47,13 +52,14 @@ module.exports.partySubscribe = partySubscribe = (model, cb) -> finished = -> # model.unsubscribe selfQ, -> selfQ.subscribe (err, self) -> + return next(err) if err model.ref '_user', self.at(0) cb() # User in a party partiesQ = model.query('parties').withId(uObj.party.current) partiesQ.fetch (err, res) -> - throw err if err + return next(err) if err p = res.at(0) model.ref '_party', p ids = p.get('members') @@ -73,7 +79,7 @@ module.exports.partySubscribe = partySubscribe = (model, cb) -> ## (3) Party has members, subscribe to those users too membersQ = model.query('users').party(ids) membersQ.fetch (err, members) -> - throw err if err + return next(err) if err model.ref '_partyMembers', members finished()