| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /* eslint-disable
- camelcase,
- */
- // TODO: This file was created by bulk-decaffeinate.
- // Fix any style issues and re-enable lint.
- /*
- * decaffeinate suggestions:
- * DS102: Remove unnecessary code created because of implicit returns
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- let WebApiManager
- const request = require('requestretry') // allow retry on error https://github.com/FGRibreau/node-request-retry
- const logger = require('@overleaf/logger')
- const Settings = require('@overleaf/settings')
- // Don't let HTTP calls hang for a long time
- const MAX_HTTP_REQUEST_LENGTH = 15000 // 15 seconds
- // DEPRECATED! This method of getting user details via track-changes is deprecated
- // in the way we lay out our services.
- // Instead, web should be responsible for collecting the raw data (user_ids) and
- // filling it out with calls to other services. All API calls should create a
- // tree-like structure as much as possible, with web as the root.
- module.exports = WebApiManager = {
- sendRequest(url, callback) {
- if (callback == null) {
- callback = function () {}
- }
- return request.get(
- {
- url: `${Settings.apis.web.url}${url}`,
- timeout: MAX_HTTP_REQUEST_LENGTH,
- maxAttempts: 2, // for node-request-retry
- auth: {
- user: Settings.apis.web.user,
- pass: Settings.apis.web.pass,
- sendImmediately: true,
- },
- },
- function (error, res, body) {
- if (error != null) {
- return callback(error)
- }
- if (res.statusCode === 404) {
- logger.debug({ url }, 'got 404 from web api')
- return callback(null, null)
- }
- if (res.statusCode >= 200 && res.statusCode < 300) {
- return callback(null, body)
- } else {
- error = new Error(
- `web returned a non-success status code: ${res.statusCode} (attempts: ${res.attempts})`
- )
- return callback(error)
- }
- }
- )
- },
- getUserInfo(user_id, callback) {
- if (callback == null) {
- callback = function () {}
- }
- const url = `/user/${user_id}/personal_info`
- logger.debug({ user_id }, 'getting user info from web')
- return WebApiManager.sendRequest(url, function (error, body) {
- let user
- if (error != null) {
- logger.error({ err: error, user_id, url }, 'error accessing web')
- return callback(error)
- }
- if (body === null) {
- logger.error({ user_id, url }, 'no user found')
- return callback(null, null)
- }
- try {
- user = JSON.parse(body)
- } catch (error1) {
- error = error1
- return callback(error)
- }
- return callback(null, {
- id: user.id,
- email: user.email,
- first_name: user.first_name,
- last_name: user.last_name,
- })
- })
- },
- getProjectDetails(project_id, callback) {
- if (callback == null) {
- callback = function () {}
- }
- const url = `/project/${project_id}/details`
- logger.debug({ project_id }, 'getting project details from web')
- return WebApiManager.sendRequest(url, function (error, body) {
- let project
- if (error != null) {
- logger.error({ err: error, project_id, url }, 'error accessing web')
- return callback(error)
- }
- try {
- project = JSON.parse(body)
- } catch (error1) {
- error = error1
- return callback(error)
- }
- return callback(null, project)
- })
- },
- }
|