Return user details like email and name in updates
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user