WebApiManager.js 2.0 KB

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