Răsfoiți Sursa

Merge pull request #5349 from overleaf/jpa-no-depreacted-api

[misc] fix eslint violations for node/no-depreacted-api

GitOrigin-RevId: 0f7d64984da9e789c4ab95381db34afb89fa1a94
Jakob Ackermann 5 ani în urmă
părinte
comite
358e8b7424

+ 1 - 2
services/clsi/app/js/StaticServerForbidSymlinks.js

@@ -19,14 +19,13 @@ const Path = require('path')
 const fs = require('fs')
 const Settings = require('@overleaf/settings')
 const logger = require('logger-sharelatex')
-const url = require('url')
 
 module.exports = ForbidSymlinks = function (staticFn, root, options) {
   const expressStatic = staticFn(root, options)
   const basePath = Path.resolve(root)
   return function (req, res, next) {
     let file, project_id, result
-    const path = __guard__(url.parse(req.url), x => x.pathname)
+    const path = req.url
     // check that the path is of the form /project_id_or_name/path/to/file.log
     if ((result = path.match(/^\/?([a-zA-Z0-9_-]+)\/(.*)/))) {
       project_id = result[1]

+ 3 - 3
services/clsi/app/js/UrlFetcher.js

@@ -17,8 +17,8 @@ const request = require('request').defaults({ jar: false })
 const fs = require('fs')
 const logger = require('logger-sharelatex')
 const settings = require('@overleaf/settings')
-const URL = require('url')
 const async = require('async')
+const { URL } = require('url')
 const { promisify } = require('util')
 
 const oneMinute = 60 * 1000
@@ -43,12 +43,12 @@ module.exports = UrlFetcher = {
       return (_callback = function () {})
     }
 
-    const u = URL.parse(url)
+    const u = new URL(url)
     if (
       settings.filestoreDomainOveride &&
       u.host !== settings.apis.clsiPerf.host
     ) {
-      url = `${settings.filestoreDomainOveride}${u.path}`
+      url = `${settings.filestoreDomainOveride}${u.pathname}${u.search}`
     }
     var timeoutHandler = setTimeout(
       function () {

+ 1 - 3
services/web/.eslintrc

@@ -20,9 +20,7 @@
     "no-var": "off",
 
     // do not allow importing of implicit dependencies.
-    "import/no-extraneous-dependencies": "error",
-
-    "node/no-deprecated-api": "off"
+    "import/no-extraneous-dependencies": "error"
   },
   "overrides": [
     // NOTE: changing paths may require updating them in the Makefile too.

+ 3 - 2
services/web/app/src/Features/Analytics/AnalyticsProxy.js

@@ -1,7 +1,7 @@
 const settings = require('@overleaf/settings')
 const Errors = require('../Errors/Errors')
 const httpProxy = require('express-http-proxy')
-const URL = require('url')
+const { URL } = require('url')
 
 module.exports = {
   call(basePath) {
@@ -16,7 +16,8 @@ module.exports = {
 
     return httpProxy(settings.apis.analytics.url, {
       proxyReqPathResolver(req) {
-        const requestPath = URL.parse(req.url).path
+        const u = new URL(req.originalUrl, settings.siteUrl)
+        const requestPath = u.pathname + u.search
         return `${basePath}${requestPath}`
       },
       proxyReqOptDecorator(proxyReqOpts, srcReq) {

+ 2 - 2
services/web/app/src/Features/BrandVariations/BrandVariationsHandler.js

@@ -1,5 +1,5 @@
 const OError = require('@overleaf/o-error')
-const url = require('url')
+const { URL } = require('url')
 const settings = require('@overleaf/settings')
 const logger = require('logger-sharelatex')
 const V1Api = require('../V1/V1Api')
@@ -78,5 +78,5 @@ function setV1AsHostIfRelativeURL(urlString) {
   // As it only applies if the second argument is not absolute, we can use it to transform relative URLs into
   // absolute ones using v1 as the host. If the URL is absolute (e.g. a filepicker one), then the base
   // argument is just ignored
-  return url.resolve(settings.apis.v1.url, urlString)
+  return new URL(urlString, settings.apis.v1.url).href
 }

+ 2 - 2
services/web/app/src/Features/Compile/ClsiManager.js

@@ -4,7 +4,7 @@ const request = require('request')
 const ProjectGetter = require('../Project/ProjectGetter')
 const ProjectEntityHandler = require('../Project/ProjectEntityHandler')
 const logger = require('logger-sharelatex')
-const Url = require('url')
+const { URL } = require('url')
 const OError = require('@overleaf/o-error')
 
 const ClsiCookieManager = require('./ClsiCookieManager')(
@@ -535,7 +535,7 @@ const ClsiManager = {
     for (const file of rawOutputFiles) {
       outputFiles.push({
         path: file.path, // the clsi is now sending this to web
-        url: Url.parse(file.url).path, // the location of the file on the clsi, excluding the host part
+        url: new URL(file.url).pathname, // the location of the file on the clsi, excluding the host part
         type: file.type,
         build: file.build,
         contentId: file.contentId,

+ 4 - 3
services/web/app/src/infrastructure/ExpressLocals.js

@@ -2,7 +2,7 @@ const logger = require('logger-sharelatex')
 const Settings = require('@overleaf/settings')
 const querystring = require('querystring')
 const _ = require('lodash')
-const Url = require('url')
+const { URL } = require('url')
 const Path = require('path')
 const moment = require('moment')
 const pug = require('pug-runtime')
@@ -221,9 +221,10 @@ module.exports = function (webRouter, privateApiRouter, publicApiRouter) {
     }
     // Don't include the query string parameters, otherwise Google
     // treats ?nocdn=true as the canonical version
-    const parsedOriginalUrl = Url.parse(req.originalUrl)
+    const parsedOriginalUrl = new URL(req.originalUrl, Settings.siteUrl)
     res.locals.currentUrl = parsedOriginalUrl.pathname
-    res.locals.currentUrlWithQueryParams = parsedOriginalUrl.path
+    res.locals.currentUrlWithQueryParams =
+      parsedOriginalUrl.pathname + parsedOriginalUrl.search
     res.locals.capitalize = function (string) {
       if (string.length === 0) {
         return ''

+ 2 - 2
services/web/app/src/infrastructure/GeoIpLookup.js

@@ -2,7 +2,7 @@ const request = require('request')
 const settings = require('@overleaf/settings')
 const _ = require('underscore')
 const logger = require('logger-sharelatex')
-const URL = require('url')
+const { URL } = require('url')
 const { promisify, promisifyMultiResult } = require('../util/promises')
 
 const currencyMappings = {
@@ -63,7 +63,7 @@ function getDetails(ip, callback) {
   }
   ip = ip.trim().split(' ')[0]
   const opts = {
-    url: URL.resolve(settings.apis.geoIpLookup.url, ip),
+    url: new URL(ip, settings.apis.geoIpLookup.url).href,
     timeout: 1000,
     json: true,
   }

+ 4 - 5
services/web/app/src/infrastructure/ProxyManager.js

@@ -14,7 +14,7 @@ let ProxyManager
 const settings = require('@overleaf/settings')
 const logger = require('logger-sharelatex')
 const request = require('request')
-const URL = require('url')
+const { URL, URLSearchParams } = require('url')
 
 module.exports = ProxyManager = {
   apply(publicApiRouter) {
@@ -68,12 +68,11 @@ module.exports = ProxyManager = {
 // make a URL from a proxy target.
 // if the query is specified, set/replace the target's query with the given query
 var makeTargetUrl = function (target, req) {
-  const targetUrl = URL.parse(parseSettingUrl(target, req))
+  const targetUrl = new URL(parseSettingUrl(target, req))
   if (req.query != null && Object.keys(req.query).length > 0) {
-    targetUrl.query = req.query
-    targetUrl.search = null // clear `search` as it takes precedence over `query`
+    targetUrl.search = new URLSearchParams(req.query).toString()
   }
-  return targetUrl.format()
+  return targetUrl.href
 }
 
 var parseSettingUrl = function (target, { params }) {

+ 2 - 4
services/web/app/src/infrastructure/RedirectManager.js

@@ -14,9 +14,7 @@
  */
 let RedirectManager
 const settings = require('@overleaf/settings')
-const logger = require('logger-sharelatex')
-const URL = require('url')
-const querystring = require('querystring')
+const { URL } = require('url')
 
 module.exports = RedirectManager = {
   apply(webRouter) {
@@ -76,7 +74,7 @@ module.exports = RedirectManager = {
 // have differences between Express and Rails, so safer to just pass the raw
 // string
 var getQueryString = function (req) {
-  const { search } = URL.parse(req.url)
+  const { search } = new URL(req.originalUrl, settings.siteUrl)
   if (search) {
     return search
   } else {

+ 1 - 1
services/web/app/src/infrastructure/UnsupportedBrowserMiddleware.js

@@ -7,7 +7,7 @@ function unsupportedBrowserMiddleware(req, res, next) {
   if (!Settings.unsupportedBrowsers) return next()
 
   // Prevent redirect loop
-  const path = Url.parse(req.url).pathname
+  const path = req.path
   if (path === '/unsupported-browser') return next()
 
   const userAgent = req.headers['user-agent']

+ 2 - 2
services/web/test/acceptance/src/mocks/MockClsiApi.js

@@ -8,13 +8,13 @@ class MockClsiApi extends AbstractMockApi {
         error: null,
         outputFiles: [
           {
-            url: `/project/${req.params.project_id}/build/1234/output/project.pdf`,
+            url: `http://clsi:3013/project/${req.params.project_id}/build/1234/output/project.pdf`,
             path: 'project.pdf',
             type: 'pdf',
             build: 1234,
           },
           {
-            url: `/project/${req.params.project_id}/build/1234/output/project.log`,
+            url: `http://clsi:3013/project/${req.params.project_id}/build/1234/output/project.log`,
             path: 'project.log',
             type: 'log',
             build: 1234,

+ 1 - 1
services/web/test/unit/src/PasswordReset/PasswordResetHandlerTests.js

@@ -23,7 +23,7 @@ const modulePath = path.join(
 
 describe('PasswordResetHandler', function () {
   beforeEach(function () {
-    this.settings = { siteUrl: 'www.sharelatex.com' }
+    this.settings = { siteUrl: 'https://www.overleaf.com' }
     this.OneTimeTokenHandler = {
       getNewToken: sinon.stub(),
       getValueFromTokenAndExpire: sinon.stub(),

+ 1 - 1
services/web/test/unit/src/Project/ProjectControllerTests.js

@@ -27,7 +27,7 @@ describe('ProjectController', function () {
           url: 'chat.com',
         },
       },
-      siteUrl: 'mysite.com',
+      siteUrl: 'https://overleaf.com',
       algolia: {},
     }
     this.brandVariationDetails = {

+ 2 - 2
services/web/test/unit/src/User/UserEmailsConfirmationHandlerTests.js

@@ -27,7 +27,7 @@ describe('UserEmailsConfirmationHandler', function () {
     this.UserEmailsConfirmationHandler = SandboxedModule.require(modulePath, {
       requires: {
         '@overleaf/settings': (this.settings = {
-          siteUrl: 'emails.example.com',
+          siteUrl: 'https://emails.example.com',
         }),
         '../Security/OneTimeTokenHandler': (this.OneTimeTokenHandler = {}),
         './UserUpdater': (this.UserUpdater = {}),
@@ -80,7 +80,7 @@ describe('UserEmailsConfirmationHandler', function () {
           .calledWith('confirmEmail', {
             to: this.email,
             confirmEmailUrl:
-              'emails.example.com/user/emails/confirm?token=new-token',
+              'https://emails.example.com/user/emails/confirm?token=new-token',
             sendingUser_id: this.user_id,
           })
           .should.equal(true)

+ 19 - 24
services/web/test/unit/src/infrastructure/ProxyManagerTests.js

@@ -82,14 +82,6 @@ describe('ProxyManager', function () {
       return this.request.reset()
     })
 
-    it('does not calls next when match', function () {
-      const target = '/'
-      this.settings.proxyUrls[this.proxyPath] = target
-      this.proxyManager.createProxy(target)(this.req, this.res, this.next)
-      sinon.assert.notCalled(this.next)
-      return sinon.assert.called(this.request)
-    })
-
     it('proxy full URL', function () {
       const targetUrl = 'https://user:pass@foo.bar:123/pa/th.ext?query#hash'
       this.settings.proxyUrls[this.proxyPath] = targetUrl
@@ -98,31 +90,32 @@ describe('ProxyManager', function () {
     })
 
     it('overwrite query', function () {
-      const targetUrl = 'foo.bar/baz?query'
+      const targetUrl = 'https://foo.bar/baz?query'
       this.req.query = { requestQuery: 'important' }
       this.settings.proxyUrls[this.proxyPath] = targetUrl
       this.proxyManager.createProxy(targetUrl)(this.req)
-      const newTargetUrl = 'foo.bar/baz?requestQuery=important'
+      const newTargetUrl = 'https://foo.bar/baz?requestQuery=important'
       return assertCalledWith(this.request, { url: newTargetUrl })
     })
 
     it('handles target objects', function () {
-      const target = { baseUrl: 'api.v1', path: '/pa/th' }
+      const target = { baseUrl: 'https://api.v1', path: '/pa/th' }
       this.settings.proxyUrls[this.proxyPath] = target
       this.proxyManager.createProxy(target)(this.req, this.res, this.next)
-      return assertCalledWith(this.request, { url: 'api.v1/pa/th' })
+      return assertCalledWith(this.request, { url: 'https://api.v1/pa/th' })
     })
 
     it('handles missing baseUrl', function () {
       const target = { path: '/pa/th' }
       this.settings.proxyUrls[this.proxyPath] = target
-      this.proxyManager.createProxy(target)(this.req, this.res, this.next)
-      return assertCalledWith(this.request, { url: 'undefined/pa/th' })
+      expect(() =>
+        this.proxyManager.createProxy(target)(this.req, this.res, this.next)
+      ).to.throw
     })
 
     it('handles dynamic path', function () {
       const target = {
-        baseUrl: 'api.v1',
+        baseUrl: 'https://api.v1',
         path(params) {
           return `/resource/${params.id}`
         },
@@ -132,12 +125,14 @@ describe('ProxyManager', function () {
       this.req.route.path = '/res/:id'
       this.req.params = { id: 123 }
       this.proxyManager.createProxy(target)(this.req, this.res, this.next)
-      return assertCalledWith(this.request, { url: 'api.v1/resource/123' })
+      return assertCalledWith(this.request, {
+        url: 'https://api.v1/resource/123',
+      })
     })
 
     it('set arbitrary options on request', function () {
       const target = {
-        baseUrl: 'api.v1',
+        baseUrl: 'https://api.v1',
         path: '/foo',
         options: { foo: 'bar' },
       }
@@ -146,12 +141,12 @@ describe('ProxyManager', function () {
       this.proxyManager.createProxy(target)(this.req, this.res, this.next)
       return assertCalledWith(this.request, {
         foo: 'bar',
-        url: 'api.v1/foo',
+        url: 'https://api.v1/foo',
       })
     })
 
     it('passes cookies', function () {
-      const target = { baseUrl: 'api.v1', path: '/foo' }
+      const target = { baseUrl: 'https://api.v1', path: '/foo' }
       this.req.url = '/foo'
       this.req.route.path = '/foo'
       this.req.headers = { cookie: 'cookie' }
@@ -160,13 +155,13 @@ describe('ProxyManager', function () {
         headers: {
           Cookie: 'cookie',
         },
-        url: 'api.v1/foo',
+        url: 'https://api.v1/foo',
       })
     })
 
     it('passes body for post', function () {
       const target = {
-        baseUrl: 'api.v1',
+        baseUrl: 'https://api.v1',
         path: '/foo',
         options: { method: 'post' },
       }
@@ -179,13 +174,13 @@ describe('ProxyManager', function () {
           foo: 'bar',
         },
         method: 'post',
-        url: 'api.v1/foo',
+        url: 'https://api.v1/foo',
       })
     })
 
     it('passes body for put', function () {
       const target = {
-        baseUrl: 'api.v1',
+        baseUrl: 'https://api.v1',
         path: '/foo',
         options: { method: 'put' },
       }
@@ -198,7 +193,7 @@ describe('ProxyManager', function () {
           foo: 'bar',
         },
         method: 'put',
-        url: 'api.v1/foo',
+        url: 'https://api.v1/foo',
       })
     })
   })