Add currently unused http_fetcher module
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative "picopackage/version"
|
||||
require_relative "picopackage/http_fetcher"
|
||||
# require_relative "picopackage/http_fetcher"
|
||||
require_relative "picopackage/provider"
|
||||
require_relative "picopackage/source_file"
|
||||
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