WebApiManager.js 2.0 KB

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