From 8fe548f70348a0fe1a8dedc6cb8631bd2021def4 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Thu, 21 Feb 2013 17:06:22 -0500 Subject: [PATCH] match derbyAuth errback on invalidated session --- src/server/store.coffee | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/server/store.coffee b/src/server/store.coffee index 38476d72cc..769b9098f5 100644 --- a/src/server/store.coffee +++ b/src/server/store.coffee @@ -1,3 +1,5 @@ +derbyAuth = require('derby-auth/store') + ### Setup read / write access @param store @@ -14,14 +16,18 @@ module.exports.customAccessControl = (store) -> userAccess = (store) -> store.readPathAccess "users.*", -> # captures, accept, err -> + err = arguments[arguments.length - 1] + return err(derbyAuth.SESSION_INVALIDATED_ERROR) if derbyAuth.sessionInvalidated(@) + accept = arguments[arguments.length - 2] - return accept(true) unless @session?.userId # https://github.com/codeparty/racer/issues/37 uid = arguments[0] accept (uid is @session.userId) or @session.req?._isServer store.writeAccess "*", "users.*", -> # captures, value, accept, err -> + err = arguments[arguments.length - 1] + return err(derbyAuth.SESSION_INVALIDATED_ERROR) if derbyAuth.sessionInvalidated(@) + accept = arguments[arguments.length-2] - return accept(true) unless @session?.userId # https://github.com/codeparty/racer/issues/37 captures = arguments[0].split('.') uid = captures.shift() attrPath = captures.join('.') # new array shifted left, after shift() was run @@ -37,14 +43,16 @@ userAccess = (store) -> accept(false) store.writeAccess "*", "users.*.balance", (id, newBalance, accept, err) -> - return accept(true) unless @session?.userId # https://github.com/codeparty/racer/issues/37 + return err(derbyAuth.SESSION_INVALIDATED_ERROR) if derbyAuth.sessionInvalidated(@) + oldBalance = @session.req?._racerModel?.get("users.#{id}.balance") || 0 purchasingSomethingOnClient = newBalance < oldBalance accept(purchasingSomethingOnClient or @session.req?._isServer) store.writeAccess "*", "users.*.flags.ads", -> # captures, value, accept, err -> - accept = arguments[arguments.length - 1] - return accept(true) unless @session?.userId # https://github.com/codeparty/racer/issues/37 + err = arguments[arguments.length - 1] + return err(derbyAuth.SESSION_INVALIDATED_ERROR) if derbyAuth.sessionInvalidated(@) + accept(@session.req?._isServer) @@ -53,14 +61,14 @@ userAccess = (store) -> Get user with API token ### REST = (store) -> - store.query.expose "users", "withIdAndToken", (id, apiToken) -> - @where("id").equals(id) - .where('apiToken').equals(apiToken) - .limit(1) + store.query.expose "users", "withIdAndToken", (uid, token) -> + @byId(uid) + .where('apiToken').equals(token) + .one - store.queryAccess "users", "withIdAndToken", (id, apiToken, accept, err) -> - return accept(true) unless @session?.userId # https://github.com/codeparty/racer/issues/37 - accept(true) # only user has id & token + store.queryAccess "users", "withIdAndToken", (uid, token, accept, err) -> + return accept(true) if uid && token + accept(false) # only user has id & token ### @@ -90,4 +98,4 @@ partySystem = (store) -> store.writeAccess "*", "parties.*", -> accept = arguments[arguments.length-2] - accept(true) \ No newline at end of file + accept(true)