| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /* eslint-disable
- camelcase,
- */
- const request = require('request')
- const settings = require('settings-sharelatex')
- const logger = require('logger-sharelatex')
- const { CodedError } = require('./Errors')
- module.exports = {
- joinProject(project_id, user, callback) {
- const user_id = user._id
- logger.log({ project_id, user_id }, 'sending join project request to web')
- const url = `${settings.apis.web.url}/project/${project_id}/join`
- const headers = {}
- if (user.anonymousAccessToken) {
- headers['x-sl-anonymous-access-token'] = user.anonymousAccessToken
- }
- request.post(
- {
- url,
- qs: { user_id },
- auth: {
- user: settings.apis.web.user,
- pass: settings.apis.web.pass,
- sendImmediately: true
- },
- json: true,
- jar: false,
- headers
- },
- function (error, response, data) {
- if (error) {
- return callback(error)
- }
- let err
- if (response.statusCode >= 200 && response.statusCode < 300) {
- if (!(data && data.project)) {
- err = new Error('no data returned from joinProject request')
- logger.error(
- { err, project_id, user_id },
- 'error accessing web api'
- )
- return callback(err)
- }
- callback(
- null,
- data.project,
- data.privilegeLevel,
- data.isRestrictedUser
- )
- } else if (response.statusCode === 429) {
- logger.log(project_id, user_id, 'rate-limit hit when joining project')
- callback(
- new CodedError(
- 'rate-limit hit when joining project',
- 'TooManyRequests'
- )
- )
- } else {
- err = new Error(
- `non-success status code from web: ${response.statusCode}`
- )
- logger.error({ err, project_id, user_id }, 'error accessing web api')
- callback(err)
- }
- }
- )
- }
- }
|