WebApiManager.js 2.1 KB

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