WebApiManager.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* eslint-disable
  2. camelcase,
  3. */
  4. const request = require('request')
  5. const settings = require('settings-sharelatex')
  6. const logger = require('logger-sharelatex')
  7. const { CodedError } = require('./Errors')
  8. module.exports = {
  9. joinProject(project_id, user, callback) {
  10. const user_id = user._id
  11. logger.log({ project_id, user_id }, 'sending join project request to web')
  12. const url = `${settings.apis.web.url}/project/${project_id}/join`
  13. const headers = {}
  14. if (user.anonymousAccessToken) {
  15. headers['x-sl-anonymous-access-token'] = user.anonymousAccessToken
  16. }
  17. request.post(
  18. {
  19. url,
  20. qs: { user_id },
  21. auth: {
  22. user: settings.apis.web.user,
  23. pass: settings.apis.web.pass,
  24. sendImmediately: true
  25. },
  26. json: true,
  27. jar: false,
  28. headers
  29. },
  30. function (error, response, data) {
  31. if (error) {
  32. return callback(error)
  33. }
  34. let err
  35. if (response.statusCode >= 200 && response.statusCode < 300) {
  36. if (!(data && data.project)) {
  37. err = new Error('no data returned from joinProject request')
  38. logger.error(
  39. { err, project_id, user_id },
  40. 'error accessing web api'
  41. )
  42. return callback(err)
  43. }
  44. callback(
  45. null,
  46. data.project,
  47. data.privilegeLevel,
  48. data.isRestrictedUser
  49. )
  50. } else if (response.statusCode === 429) {
  51. logger.log(project_id, user_id, 'rate-limit hit when joining project')
  52. callback(
  53. new CodedError(
  54. 'rate-limit hit when joining project',
  55. 'TooManyRequests'
  56. )
  57. )
  58. } else {
  59. err = new Error(
  60. `non-success status code from web: ${response.statusCode}`
  61. )
  62. logger.error({ err, project_id, user_id }, 'error accessing web api')
  63. callback(err)
  64. }
  65. }
  66. )
  67. }
  68. }