Return user details like email and name in updates

This commit is contained in:
James Allen
2014-03-06 18:04:00 +00:00
parent 5fc139db00
commit b45db3aa2b
12 changed files with 283 additions and 14 deletions
@@ -5,7 +5,7 @@ logger = require "logger-sharelatex"
module.exports = DiffManager =
getLatestDocAndUpdates: (project_id, doc_id, fromVersion, toVersion, callback = (error, lines, version, updates) ->) ->
UpdatesManager.getUpdates doc_id, from: fromVersion, to: toVersion, (error, updates) ->
UpdatesManager.getUpdatesWithUserInfo doc_id, from: fromVersion, to: toVersion, (error, updates) ->
return callback(error) if error?
DocumentUpdaterManager.getDocument project_id, doc_id, (error, lines, version) ->
return callback(error) if error?
@@ -37,7 +37,7 @@ module.exports = HttpController =
if req.query.limit?
limit = parseInt(req.query.limit, 10)
UpdatesManager.getUpdates doc_id, to: to, limit: limit, (error, updates) ->
UpdatesManager.getUpdatesWithUserInfo doc_id, to: to, limit: limit, (error, updates) ->
return next(error) if error?
formattedUpdates = for update in updates
{
@@ -45,5 +45,3 @@ module.exports = HttpController =
v: update.v
}
res.send JSON.stringify updates: formattedUpdates
@@ -2,7 +2,9 @@ MongoManager = require "./MongoManager"
RedisManager = require "./RedisManager"
UpdateCompressor = require "./UpdateCompressor"
LockManager = require "./LockManager"
WebApiManager = require "./WebApiManager"
logger = require "logger-sharelatex"
async = require "async"
module.exports = UpdatesManager =
compressAndSaveRawUpdates: (doc_id, rawUpdates, callback = (error) ->) ->
@@ -70,3 +72,31 @@ module.exports = UpdatesManager =
return callback(error) if error?
MongoManager.getUpdates doc_id, options, callback
getUpdatesWithUserInfo: (doc_id, options = {}, callback = (error, updates) ->) ->
UpdatesManager.getUpdates doc_id, options, (error, updates) ->
return callback(error) if error?
UpdatesManager.fillUserInfo updates, (error, updates) ->
return callback(error) if error?
callback null, updates
fillUserInfo: (updates, callback = (error, updates) ->) ->
users = {}
for update in updates
users[update.meta.user_id] = true
jobs = []
for user_id, _ of users
do (user_id) ->
jobs.push (callback) ->
WebApiManager.getUserInfo user_id, (error, userInfo) ->
return callback(error) if error?
users[user_id] = userInfo
callback()
async.series jobs, (error) ->
return callback(error) if error?
for update in updates
user_id = update.meta.user_id
delete update.meta.user_id
update.meta.user = users[user_id]
callback null, updates
@@ -0,0 +1,32 @@
request = require "request"
logger = require "logger-sharelatex"
Settings = require "settings-sharelatex"
module.exports = WebApiManager =
getUserInfo: (user_id, callback = (error, userInfo) ->) ->
url = "#{Settings.apis.web.url}/user/#{user_id}/personal_info"
logger.log user_id: user_id, "getting user info from web"
request.get {
url: url
auth:
user: Settings.apis.web.user
pass: Settings.apis.web.pass
sendImmediately: true
}, (error, res, body)->
if error?
return callback(error)
if res.statusCode >= 200 and res.statusCode < 300
try
user = JSON.parse(body)
catch error
return callback(error)
callback null, {
id: user.id
email: user.email
first_name: user.first_name
last_name: user.last_name
}
else
error = new Error("web returned a non-success status code: #{res.statusCode}")
logger.error err: error, user_id: user_id, url: url, "error accessing web"
callback error