| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- request = require 'request'
- _ = require "underscore"
- urlValidator = require 'valid-url'
- { InvalidUrlError, UrlFetchFailedError } = require './LinkedFilesErrors'
- LinkedFilesHandler = require './LinkedFilesHandler'
- UrlHelper = require '../Helpers/UrlHelper'
- module.exports = UrlAgent = {
- createLinkedFile: (project_id, linkedFileData, name, parent_folder_id, user_id, callback) ->
- linkedFileData = @._sanitizeData(linkedFileData)
- @_getUrlStream project_id, linkedFileData, user_id, (err, readStream) ->
- return callback(err) if err?
- readStream.on "error", callback
- readStream.on "response", (response) ->
- if 200 <= response.statusCode < 300
- readStream.resume()
- LinkedFilesHandler.importFromStream project_id,
- readStream,
- linkedFileData,
- name,
- parent_folder_id,
- user_id,
- (err, file) ->
- return callback(err) if err?
- callback(null, file._id) # Created
- else
- error = new UrlFetchFailedError("url fetch failed: #{linkedFileData.url}")
- error.statusCode = response.statusCode
- callback(error)
- refreshLinkedFile: (project_id, linkedFileData, name, parent_folder_id, user_id, callback) ->
- @createLinkedFile project_id, linkedFileData, name, parent_folder_id, user_id, callback
- _sanitizeData: (data) ->
- return {
- provider: data.provider
- url: UrlHelper.prependHttpIfNeeded(data.url)
- }
- _getUrlStream: (project_id, data, current_user_id, callback = (error, fsPath) ->) ->
- callback = _.once(callback)
- url = data.url
- if !urlValidator.isWebUri(url)
- return callback(new InvalidUrlError("invalid url: #{url}"))
- url = UrlHelper.wrapUrlWithProxy(url)
- readStream = request.get(url)
- readStream.pause()
- callback(null, readStream)
- }
|