Add currently unused http_fetcher module
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative "picopackage/version"
|
require_relative "picopackage/version"
|
||||||
require_relative "picopackage/http_fetcher"
|
# require_relative "picopackage/http_fetcher"
|
||||||
require_relative "picopackage/provider"
|
require_relative "picopackage/provider"
|
||||||
require_relative "picopackage/source_file"
|
require_relative "picopackage/source_file"
|
||||||
require_relative "picopackage/scanner"
|
require_relative "picopackage/scanner"
|
||||||
|
|||||||
36
lib/picopackage/http_fetcher.rb
Normal file
36
lib/picopackage/http_fetcher.rb
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Currently unused. If we get to the point where a provider needs to make a http request, we'll
|
||||||
|
# swappout DefaultProvider#fetch and include this module.
|
||||||
|
|
||||||
|
module Picopackage
|
||||||
|
module HttpFetcher
|
||||||
|
MAX_SIZE = 1024 * 1024
|
||||||
|
TIMEOUT = 10
|
||||||
|
|
||||||
|
# This seemed to cause loops - constanting making requests to the same URL
|
||||||
|
|
||||||
|
def fetch_url(url, max_size: MAX_SIZE, timeout: TIMEOUT)
|
||||||
|
raise ArgumentError, "This method shouldn't be called"
|
||||||
|
uri = URI(url)
|
||||||
|
|
||||||
|
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https', read_timeout: timeout, open_timeout: timeout) do |http|
|
||||||
|
request = Net::HTTP::Get.new(uri.path)
|
||||||
|
|
||||||
|
http.request_get(uri.path) do |response|
|
||||||
|
unless response.is_a?(Net::HTTPSuccess)
|
||||||
|
raise FetchError, "HTTP #{response.code} #{response.message}"
|
||||||
|
end
|
||||||
|
|
||||||
|
data = String.new(capacity: max_size)
|
||||||
|
response.read_body do |chunk|
|
||||||
|
# Stream chunks with size checking
|
||||||
|
if data.bytesize + chunk.bytesize > max_size
|
||||||
|
raise FileTooLargeError
|
||||||
|
end
|
||||||
|
data << chunk
|
||||||
|
end
|
||||||
|
end
|
||||||
|
data
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user