From 60948e7881654f40e944279c4292ae676b208a46 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Thu, 30 May 2013 18:43:39 -0400 Subject: [PATCH 1/8] move fixCorruptUser to the client Conflicts: src/app/index.coffee --- src/app/index.coffee | 8 +++++--- src/app/misc.coffee | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/app/index.coffee b/src/app/index.coffee index ec5772a4dc..69393f1e0d 100644 --- a/src/app/index.coffee +++ b/src/app/index.coffee @@ -67,7 +67,6 @@ get '/', (page, model, params, next) -> # removed force-ssl (handled in nginx), see git for code setupSubscriptions page, model, params, next, -> - misc.fixCorruptUser(model) # https://github.com/lefnire/habitrpg/issues/634 require('./items').server(model) #refLists _.each ['habit', 'daily', 'todo', 'reward'], (type) -> @@ -79,9 +78,12 @@ get '/', (page, model, params, next) -> # ========== CONTROLLER FUNCTIONS ========== ready (model) -> - user = model.at('_user') - browser = require './browser' + exports.removeAt = (e) -> e.at().remove() # used for things like remove website, chat, etc + user = model.at('_user') + misc.fixCorruptUser(model) # https://github.com/lefnire/habitrpg/issues/634 + + browser = require './browser' require('./tasks').app(exports, model) require('./items').app(exports, model) require('./party').app(exports, model, app) diff --git a/src/app/misc.coffee b/src/app/misc.coffee index e2b0743aa0..e1662ac04a 100644 --- a/src/app/misc.coffee +++ b/src/app/misc.coffee @@ -77,6 +77,7 @@ module.exports.fixCorruptUser = (model) -> delete tasks[key] true + resetDom = false batchTxn model, (uObj, paths, batch) -> ## fix https://github.com/lefnire/habitrpg/issues/1086 @@ -101,6 +102,8 @@ module.exports.fixCorruptUser = (model) -> batch.set("#{type}Ids", preened) console.error uObj.id + "'s #{type}s were corrupt." true + resetDom = !_.isEmpty(paths) + require('./browser').resetDom(model) if resetDom module.exports.viewHelpers = (view) -> From 73d71a0be16978f8f51751a3c91af5ab10c4e3ea Mon Sep 17 00:00:00 2001 From: yangit Date: Fri, 31 May 2013 20:28:54 +0800 Subject: [PATCH 2/8] APIv2 init --- src/server/apiv2.coffee | 53 +++++++++++++++++++++++++++++++++++++++++ src/server/index.coffee | 1 + 2 files changed, 54 insertions(+) create mode 100644 src/server/apiv2.coffee diff --git a/src/server/apiv2.coffee b/src/server/apiv2.coffee new file mode 100644 index 0000000000..f54c269c81 --- /dev/null +++ b/src/server/apiv2.coffee @@ -0,0 +1,53 @@ +express = require 'express' +router = new express.Router() +util = require('util') + +_ = require 'lodash' +algos = require 'habitrpg-shared/script/algos' +helpers = require 'habitrpg-shared/script/helpers' +validator = require 'derby-auth/node_modules/validator' +check = validator.check +sanitize = validator.sanitize +misc = require '../app/misc' + +NO_TOKEN_OR_UID = err: "You must include a token and uid (user id) in your request" +NO_USER_FOUND = err: "No user found." + +# ---------- /api/v1 API ------------ +# Every url added beneath router is prefaced by /api/v2 + +### + API Status +### +router.get '/status', (req, res) -> + res.json status: 'up' + +### + beforeEach auth interceptor +### +auth = (req, res, next) -> + uid = req.headers['x-api-user'] + token = req.headers['x-api-key'] + return res.json 401, NO_TOKEN_OR_UID unless uid || token + + model = req.getModel() + query = model.query('users').withIdAndToken(uid, token) + + query.fetch (err, user) -> + return res.json err: err if err + req.user = user + req.userObj = user.get() + return res.json 401, NO_USER_FOUND if !req.userObj || _.isEmpty(req.userObj) + req._isServer = true + next() + +### +POST new actions +### +router.post '/', auth, (req, res) -> + if _.isArray req.body + console.log util.inspect req.body + + res.json 200, req.userObj + +module.exports = router \ No newline at end of file diff --git a/src/server/index.coffee b/src/server/index.coffee index 152b9a79c9..3f707666e2 100644 --- a/src/server/index.coffee +++ b/src/server/index.coffee @@ -80,6 +80,7 @@ mongo_store = new MongoStore {url: process.env.NODE_DB_URI}, -> .use(middleware.translate) # API should be hit before all other routes .use('/api/v1', require('./api').middleware) + .use('/api/v2', require('./apiv2').middleware) .use(require('./deprecated').middleware) # Show splash page for newcomers .use(middleware.splash) From 9f0e94a5a7e6fb99b27cd3b57d4913c65fe9749d Mon Sep 17 00:00:00 2001 From: yangit Date: Fri, 31 May 2013 22:56:55 +0800 Subject: [PATCH 3/8] APIv2 init2 --- src/server/apiv2.coffee | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/server/apiv2.coffee b/src/server/apiv2.coffee index f54c269c81..90e419e464 100644 --- a/src/server/apiv2.coffee +++ b/src/server/apiv2.coffee @@ -45,7 +45,15 @@ auth = (req, res, next) -> POST new actions ### router.post '/', auth, (req, res) -> - if _.isArray req.body + actions = req.body + if _.isArray actions + actions.forEach (action)-> + switch action.op + when score then + {} + when newTask then + req.user.set "tasks.#{req.task.id}", action.task + console.log util.inspect req.body res.json 200, req.userObj From 81f2b6789ef66bd21f3fbaafa43ded19a02865b8 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 31 May 2013 11:05:09 -0400 Subject: [PATCH 4/8] WIP addTask in api.coffee --- src/server/api.coffee | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/server/api.coffee b/src/server/api.coffee index 45b0250b17..aefffbc11d 100644 --- a/src/server/api.coffee +++ b/src/server/api.coffee @@ -170,10 +170,7 @@ updateTasks = (tasks, user, model) -> else user.set "tasks.#{task.id}", task else - type = task.type || 'habit' - model.ref '_user', user - model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids" - model.at("_#{type}List").push task + task = addTask(model,task) tasks[idx] = task return tasks @@ -181,19 +178,19 @@ router.post '/user/tasks', auth, (req, res) -> tasks = updateTasks req.body, req.user, req.getModel() res.json 201, tasks +addTask = module.exports.addTask = (model, task) -> + type = task.type || 'habit'{ + model.ref '_user', req.user + model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids" + model.at("_#{type}List").push task + task ### POST /user/task/ ### router.post '/user/task', auth, validateTask, (req, res) -> - task = req.task - type = task.type - model = req.getModel() - model.ref '_user', req.user - model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids" - model.at("_#{type}List").push task - + task = addTask(model, req.task) res.json 201, task ### From 413abdb3455d82b84cc8b1a3257ada49d92021ee Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 31 May 2013 11:12:18 -0400 Subject: [PATCH 5/8] api_v2 bug fix --- src/server/apiv2.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/apiv2.coffee b/src/server/apiv2.coffee index 90e419e464..db4e2d1a02 100644 --- a/src/server/apiv2.coffee +++ b/src/server/apiv2.coffee @@ -49,9 +49,9 @@ router.post '/', auth, (req, res) -> if _.isArray actions actions.forEach (action)-> switch action.op - when score then + when score {} - when newTask then + when newTask req.user.set "tasks.#{req.task.id}", action.task console.log util.inspect req.body From cdc7b06f92ffdef2dbc356b613737d7d601712da Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 31 May 2013 11:12:39 -0400 Subject: [PATCH 6/8] api_v2 bug fix --- src/server/api.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/api.coffee b/src/server/api.coffee index aefffbc11d..5f68ce4e42 100644 --- a/src/server/api.coffee +++ b/src/server/api.coffee @@ -179,7 +179,7 @@ router.post '/user/tasks', auth, (req, res) -> res.json 201, tasks addTask = module.exports.addTask = (model, task) -> - type = task.type || 'habit'{ + type = task.type || 'habit' model.ref '_user', req.user model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids" model.at("_#{type}List").push task From 9ca97173871ddfb8e304ce7d1d7eda7a5f90249f Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 31 May 2013 11:20:40 -0400 Subject: [PATCH 7/8] Revert "WIP addTask in api.coffee" This reverts commit 81f2b6789ef66bd21f3fbaafa43ded19a02865b8. --- src/server/api.coffee | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/server/api.coffee b/src/server/api.coffee index 5f68ce4e42..45b0250b17 100644 --- a/src/server/api.coffee +++ b/src/server/api.coffee @@ -170,7 +170,10 @@ updateTasks = (tasks, user, model) -> else user.set "tasks.#{task.id}", task else - task = addTask(model,task) + type = task.type || 'habit' + model.ref '_user', user + model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids" + model.at("_#{type}List").push task tasks[idx] = task return tasks @@ -178,19 +181,19 @@ router.post '/user/tasks', auth, (req, res) -> tasks = updateTasks req.body, req.user, req.getModel() res.json 201, tasks -addTask = module.exports.addTask = (model, task) -> - type = task.type || 'habit' - model.ref '_user', req.user - model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids" - model.at("_#{type}List").push task - task ### POST /user/task/ ### router.post '/user/task', auth, validateTask, (req, res) -> + task = req.task + type = task.type + model = req.getModel() - task = addTask(model, req.task) + model.ref '_user', req.user + model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids" + model.at("_#{type}List").push task + res.json 201, task ### From 268157ca246280aace22dff949367691d7db96d6 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Fri, 31 May 2013 16:19:57 -0400 Subject: [PATCH 8/8] tags: use explicit {#each users[_userId].tags} instead of model.ref private path {#each _user.tags}. fixed many tags issues. see https://github.com/codeparty/derby/issues/267 --- src/app/filters.coffee | 4 +--- views/app/filters.html | 16 ++++++++-------- views/app/tasks.html | 2 +- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/app/filters.coffee b/src/app/filters.coffee index 605e4ebb63..a7c1a87dcf 100644 --- a/src/app/filters.coffee +++ b/src/app/filters.coffee @@ -14,9 +14,7 @@ module.exports.app = (appExports, model) -> model.set '_newTag', '' appExports.toggleEditingTags = -> - before = model.get('_editingTags') - model.set '_editingTags', !before, -> - location.reload() if before is true #when they're done, refresh the page + model.set '_editingTags', !model.get('_editingTags') appExports.clearFilters = -> user.set 'filters', {} diff --git a/views/app/filters.html b/views/app/filters.html index 1a04d02a3a..23581d7fc9 100644 --- a/views/app/filters.html +++ b/views/app/filters.html @@ -7,8 +7,8 @@
  • - {#each _user.tags as :tag} -
  • + {#each users[_userId].tags as :tag} +
  • {#if _editingTags}
    @@ -29,7 +29,7 @@ {/}
  • - +
  • @@ -37,15 +37,15 @@ - + @@ -53,9 +53,9 @@
    Tags - {{#each _user.tags as :tag}} + {#each users[_userId].tags as :tag} - {{/}} + {/}
    \ No newline at end of file diff --git a/views/app/tasks.html b/views/app/tasks.html index 7df21248f3..5a7eab3899 100644 --- a/views/app/tasks.html +++ b/views/app/tasks.html @@ -158,7 +158,7 @@ -
  • +