| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /* eslint-disable
- camelcase,
- handle-callback-err,
- */
- // 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("logger-sharelatex");
- const Settings = require("settings-sharelatex");
- // 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(error, body) {}; }
- 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.log({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(error, userInfo) {}; }
- const url = `/user/${user_id}/personal_info`;
- logger.log({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(error, details) {}; }
- const url = `/project/${project_id}/details`;
- logger.log({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);
- });
- }
- });
|