Add currently unused http_fetcher module

This commit is contained in:
Dan Milne
2025-01-21 14:25:39 +11:00
parent a066b73f2d
commit 4ea93f4c73
2 changed files with 37 additions and 1 deletions

View File

@@ -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"

View 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