mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Use external proxy
This commit is contained in:
parent
cae09028ff
commit
a99f55891f
5 changed files with 37 additions and 30 deletions
|
@ -2,6 +2,7 @@ request = require 'request'
|
||||||
FileWriter = require('../../infrastructure/FileWriter')
|
FileWriter = require('../../infrastructure/FileWriter')
|
||||||
_ = require "underscore"
|
_ = require "underscore"
|
||||||
urlValidator = require 'valid-url'
|
urlValidator = require 'valid-url'
|
||||||
|
Settings = require 'settings-sharelatex'
|
||||||
|
|
||||||
UrlFetchFailedError = (message) ->
|
UrlFetchFailedError = (message) ->
|
||||||
error = new Error(message)
|
error = new Error(message)
|
||||||
|
@ -17,27 +18,21 @@ InvalidUrlError = (message) ->
|
||||||
return error
|
return error
|
||||||
InvalidUrlError.prototype.__proto__ = Error.prototype
|
InvalidUrlError.prototype.__proto__ = Error.prototype
|
||||||
|
|
||||||
|
|
||||||
module.exports = UrlAgent = {
|
module.exports = UrlAgent = {
|
||||||
UrlFetchFailedError: UrlFetchFailedError
|
UrlFetchFailedError: UrlFetchFailedError
|
||||||
InvalidUrlError: InvalidUrlError
|
InvalidUrlError: InvalidUrlError
|
||||||
|
|
||||||
sanitizeData: (data) ->
|
sanitizeData: (data) ->
|
||||||
return {
|
return {
|
||||||
url: data.url
|
url: @._prependHttpIfNeeded(data.url)
|
||||||
}
|
}
|
||||||
|
|
||||||
_prependHttpIfNeeded: (url) ->
|
|
||||||
if !url.match('://')
|
|
||||||
url = 'http://' + url
|
|
||||||
return url
|
|
||||||
|
|
||||||
writeIncomingFileToDisk: (project_id, data, current_user_id, callback = (error, fsPath) ->) ->
|
writeIncomingFileToDisk: (project_id, data, current_user_id, callback = (error, fsPath) ->) ->
|
||||||
# TODO: Proxy through external API
|
|
||||||
callback = _.once(callback)
|
callback = _.once(callback)
|
||||||
url = @._prependHttpIfNeeded(data.url)
|
url = data.url
|
||||||
if !urlValidator.isWebUri(url)
|
if !urlValidator.isWebUri(url)
|
||||||
return callback(new InvalidUrlError())
|
return callback(new InvalidUrlError())
|
||||||
|
url = @._wrapWithProxy(url)
|
||||||
readStream = request.get(url)
|
readStream = request.get(url)
|
||||||
readStream.on "error", callback
|
readStream.on "error", callback
|
||||||
readStream.on "response", (response) ->
|
readStream.on "response", (response) ->
|
||||||
|
@ -59,4 +54,15 @@ module.exports = UrlAgent = {
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
next(error)
|
next(error)
|
||||||
|
|
||||||
|
_prependHttpIfNeeded: (url) ->
|
||||||
|
if !url.match('://')
|
||||||
|
url = 'http://' + url
|
||||||
|
return url
|
||||||
|
|
||||||
|
_wrapWithProxy: (url) ->
|
||||||
|
# TODO: Consider what to do for Community and Enterprise edition?
|
||||||
|
if !Settings.apis?.linkedUrlProxy?.url?
|
||||||
|
throw new Error('no linked url proxy configured')
|
||||||
|
return "#{Settings.apis.linkedUrlProxy.url}?url=#{encodeURIComponent(url)}"
|
||||||
}
|
}
|
|
@ -152,6 +152,8 @@ module.exports = settings =
|
||||||
url: "http://#{process.env['NOTIFICATIONS_HOST'] or 'localhost'}:3042"
|
url: "http://#{process.env['NOTIFICATIONS_HOST'] or 'localhost'}:3042"
|
||||||
analytics:
|
analytics:
|
||||||
url: "http://#{process.env['ANALYTICS_HOST'] or 'localhost'}:3050"
|
url: "http://#{process.env['ANALYTICS_HOST'] or 'localhost'}:3050"
|
||||||
|
linkedUrlProxy:
|
||||||
|
url: process.env['LINKED_URL_PROXY']
|
||||||
|
|
||||||
templates:
|
templates:
|
||||||
user_id: process.env.TEMPLATES_USER_ID or "5395eb7aad1f29a88756c7f2"
|
user_id: process.env.TEMPLATES_USER_ID or "5395eb7aad1f29a88756c7f2"
|
||||||
|
|
|
@ -15,6 +15,7 @@ services:
|
||||||
MONGO_URL: "mongodb://mongo/sharelatex"
|
MONGO_URL: "mongodb://mongo/sharelatex"
|
||||||
SHARELATEX_ALLOW_PUBLIC_ACCESS: 'true'
|
SHARELATEX_ALLOW_PUBLIC_ACCESS: 'true'
|
||||||
PROJECT_HISTORY_ENABLED: 'true'
|
PROJECT_HISTORY_ENABLED: 'true'
|
||||||
|
LINKED_URL_PROXY: 'http://localhost:6543'
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
- mongo
|
- mongo
|
||||||
|
|
|
@ -3,18 +3,23 @@ expect = require("chai").expect
|
||||||
_ = require 'underscore'
|
_ = require 'underscore'
|
||||||
|
|
||||||
MockFileStoreApi = require './helpers/MockFileStoreApi'
|
MockFileStoreApi = require './helpers/MockFileStoreApi'
|
||||||
MockURLSource = require './helpers/MockURLSource'
|
|
||||||
request = require "./helpers/request"
|
request = require "./helpers/request"
|
||||||
User = require "./helpers/User"
|
User = require "./helpers/User"
|
||||||
|
|
||||||
MockURLSource.app.get "/foo", (req, res, next) =>
|
|
||||||
res.send('foo foo foo')
|
express = require("express")
|
||||||
MockURLSource.app.get "/bar", (req, res, next) =>
|
LinkedUrlProxy = express()
|
||||||
res.send('bar bar bar')
|
LinkedUrlProxy.get "/", (req, res, next) =>
|
||||||
|
if req.query.url == 'http://example.com/foo'
|
||||||
|
res.send('foo foo foo')
|
||||||
|
else if req.query.url == 'http://example.com/bar'
|
||||||
|
res.send('bar bar bar')
|
||||||
|
else
|
||||||
|
res.sendStatus(404)
|
||||||
|
|
||||||
describe "LinkedFiles", ->
|
describe "LinkedFiles", ->
|
||||||
before (done) ->
|
before (done) ->
|
||||||
MockURLSource.run (error) =>
|
LinkedUrlProxy.listen 6543, (error) =>
|
||||||
return done(error) if error?
|
return done(error) if error?
|
||||||
@owner = new User()
|
@owner = new User()
|
||||||
@owner.login done
|
@owner.login done
|
||||||
|
@ -36,7 +41,7 @@ describe "LinkedFiles", ->
|
||||||
json:
|
json:
|
||||||
provider: 'url'
|
provider: 'url'
|
||||||
data: {
|
data: {
|
||||||
url: "http://localhost:6543/foo"
|
url: 'http://example.com/foo'
|
||||||
}
|
}
|
||||||
parent_folder_id: @root_folder_id
|
parent_folder_id: @root_folder_id
|
||||||
name: 'url-test-file-1'
|
name: 'url-test-file-1'
|
||||||
|
@ -48,7 +53,7 @@ describe "LinkedFiles", ->
|
||||||
file = project.rootFolder[0].fileRefs[0]
|
file = project.rootFolder[0].fileRefs[0]
|
||||||
expect(file.linkedFileData).to.deep.equal({
|
expect(file.linkedFileData).to.deep.equal({
|
||||||
provider: 'url'
|
provider: 'url'
|
||||||
url: "http://localhost:6543/foo"
|
url: 'http://example.com/foo'
|
||||||
})
|
})
|
||||||
@owner.request.get "/project/#{@project_id}/file/#{file._id}", (error, response, body) ->
|
@owner.request.get "/project/#{@project_id}/file/#{file._id}", (error, response, body) ->
|
||||||
throw error if error?
|
throw error if error?
|
||||||
|
@ -62,7 +67,7 @@ describe "LinkedFiles", ->
|
||||||
json:
|
json:
|
||||||
provider: 'url'
|
provider: 'url'
|
||||||
data: {
|
data: {
|
||||||
url: "http://localhost:6543/foo"
|
url: 'http://example.com/foo'
|
||||||
}
|
}
|
||||||
parent_folder_id: @root_folder_id
|
parent_folder_id: @root_folder_id
|
||||||
name: 'url-test-file-2'
|
name: 'url-test-file-2'
|
||||||
|
@ -74,7 +79,7 @@ describe "LinkedFiles", ->
|
||||||
json:
|
json:
|
||||||
provider: 'url'
|
provider: 'url'
|
||||||
data: {
|
data: {
|
||||||
url: "http://localhost:6543/bar"
|
url: 'http://example.com/bar'
|
||||||
}
|
}
|
||||||
parent_folder_id: @root_folder_id
|
parent_folder_id: @root_folder_id
|
||||||
name: 'url-test-file-2'
|
name: 'url-test-file-2'
|
||||||
|
@ -86,7 +91,7 @@ describe "LinkedFiles", ->
|
||||||
file = project.rootFolder[0].fileRefs[1]
|
file = project.rootFolder[0].fileRefs[1]
|
||||||
expect(file.linkedFileData).to.deep.equal({
|
expect(file.linkedFileData).to.deep.equal({
|
||||||
provider: 'url'
|
provider: 'url'
|
||||||
url: "http://localhost:6543/bar"
|
url: 'http://example.com/bar'
|
||||||
})
|
})
|
||||||
@owner.request.get "/project/#{@project_id}/file/#{file._id}", (error, response, body) ->
|
@owner.request.get "/project/#{@project_id}/file/#{file._id}", (error, response, body) ->
|
||||||
throw error if error?
|
throw error if error?
|
||||||
|
@ -100,7 +105,7 @@ describe "LinkedFiles", ->
|
||||||
json:
|
json:
|
||||||
provider: 'url'
|
provider: 'url'
|
||||||
data: {
|
data: {
|
||||||
url: "http://localhost:6543/does-not-exist"
|
url: 'http://example.com/does-not-exist'
|
||||||
}
|
}
|
||||||
parent_folder_id: @root_folder_id
|
parent_folder_id: @root_folder_id
|
||||||
name: 'url-test-file-3'
|
name: 'url-test-file-3'
|
||||||
|
@ -154,7 +159,7 @@ describe "LinkedFiles", ->
|
||||||
json:
|
json:
|
||||||
provider: 'url'
|
provider: 'url'
|
||||||
data: {
|
data: {
|
||||||
url: "http://localhost:6543/foo"
|
url: 'example.com/foo'
|
||||||
}
|
}
|
||||||
parent_folder_id: @root_folder_id
|
parent_folder_id: @root_folder_id
|
||||||
name: 'url-test-file-6'
|
name: 'url-test-file-6'
|
||||||
|
@ -167,7 +172,7 @@ describe "LinkedFiles", ->
|
||||||
file.name == 'url-test-file-6'
|
file.name == 'url-test-file-6'
|
||||||
expect(file.linkedFileData).to.deep.equal({
|
expect(file.linkedFileData).to.deep.equal({
|
||||||
provider: 'url'
|
provider: 'url'
|
||||||
url: "http://localhost:6543/foo"
|
url: 'http://example.com/foo'
|
||||||
})
|
})
|
||||||
@owner.request.get "/project/#{@project_id}/file/#{file._id}", (error, response, body) ->
|
@owner.request.get "/project/#{@project_id}/file/#{file._id}", (error, response, body) ->
|
||||||
throw error if error?
|
throw error if error?
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
express = require("express")
|
|
||||||
app = express()
|
|
||||||
|
|
||||||
module.exports = MockUrlSource =
|
|
||||||
app: app
|
|
||||||
run: (callback) ->
|
|
||||||
app.listen 6543, callback
|
|
Loading…
Reference in a new issue