WebApiManager.coffee 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. request = require "request"
  2. logger = require "logger-sharelatex"
  3. Settings = require "settings-sharelatex"
  4. # DEPRECATED! This method of getting user details via track-changes is deprecated
  5. # in the way we lay out our services.
  6. # Instead, web should be responsible for collecting the raw data (user_ids) and
  7. # filling it out with calls to other services. All API calls should create a
  8. # tree-like structure as much as possible, with web as the root.
  9. module.exports = WebApiManager =
  10. sendRequest: (url, callback = (error, body) ->) ->
  11. request.get {
  12. url: "#{Settings.apis.web.url}#{url}"
  13. auth:
  14. user: Settings.apis.web.user
  15. pass: Settings.apis.web.pass
  16. sendImmediately: true
  17. }, (error, res, body)->
  18. if error?
  19. return callback(error)
  20. if res.statusCode == 404
  21. logger.log url: url, "got 404 from web api"
  22. return callback null, null
  23. if res.statusCode >= 200 and res.statusCode < 300
  24. return callback null, body
  25. else
  26. error = new Error("web returned a non-success status code: #{res.statusCode}")
  27. callback error
  28. getUserInfo: (user_id, callback = (error, userInfo) ->) ->
  29. url = "/user/#{user_id}/personal_info"
  30. logger.log user_id: user_id, "getting user info from web"
  31. WebApiManager.sendRequest url, (error, body) ->
  32. if error?
  33. logger.error err: error, user_id: user_id, url: url, "error accessing web"
  34. return callback error
  35. if body == null
  36. logger.error user_id: user_id, url: url, "no user found"
  37. return callback null, null
  38. try
  39. user = JSON.parse(body)
  40. catch error
  41. return callback(error)
  42. callback null, {
  43. id: user.id
  44. email: user.email
  45. first_name: user.first_name
  46. last_name: user.last_name
  47. }
  48. getProjectDetails: (project_id, callback = (error, details) ->) ->
  49. url = "/project/#{project_id}/details"
  50. logger.log project_id: project_id, "getting project details from web"
  51. WebApiManager.sendRequest url, (error, body) ->
  52. if error?
  53. logger.error err: error, project_id: project_id, url: url, "error accessing web"
  54. return callback error
  55. try
  56. project = JSON.parse(body)
  57. catch error
  58. return callback(error)
  59. callback null, project