WebApiManager.js 2.0 KB

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