diff --git a/lib/roda/proxy.rb b/lib/roda/proxy.rb index 16b4792..f2b5dad 100644 --- a/lib/roda/proxy.rb +++ b/lib/roda/proxy.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'faraday' require 'roda/proxy/version' - +require 'net_http_unix' + # :nodoc: class Roda # :nodoc: @@ -35,8 +35,11 @@ class Roda # rewritten to be the destination host. The response headers, body and # status are returned to the client. def proxy - method = Faraday.method(env['REQUEST_METHOD'].downcase.to_sym) - f_response = method.call(_proxy_url) { |req| _proxy_request(req) } + client = NetX::HTTPUnix.new(_sock_url) + request_class = Net::HTTP.const_get(:"#{env['REQUEST_METHOD'].to_s.downcase.capitalize}") + req = request_class.new(_proxy_url.to_s, _proxy_headers) + + f_response = client.request(req) # p f_response _respond(f_response) end @@ -63,12 +66,13 @@ class Roda private - + def _sock_url + roda_class.opts[:proxy_to] + end def _proxy_url - @_proxy_url ||= URI(roda_class.opts[:proxy_to]) - .then { |uri| uri.path = roda_class.opts[:proxy_path]; uri } # prefix - .then { |uri| uri.path += env['PATH_INFO'][1..-1]; uri } # path - .then { |uri| uri.query = env['QUERY_STRING']; uri } + uri = URI("#{roda_class.opts[:proxy_path]}#{env['PATH_INFO'][1..-1]}") + uri.query = env['QUERY_STRING'] + uri end def _proxy_headers @@ -82,15 +86,11 @@ class Roda .join('-') end .merge({ - 'Host' => "#{_proxy_url.host}:#{_proxy_url.port}", + 'Host' => "localhost", 'Via' => _via_header_string }) end - def _proxy_request(req) - req.headers = _proxy_headers - end - def _respond(proxied_response) response.status = proxied_response.status proxied_response diff --git a/roda-proxy.gemspec b/roda-proxy.gemspec index c00ecf7..4ac1cbf 100644 --- a/roda-proxy.gemspec +++ b/roda-proxy.gemspec @@ -12,7 +12,7 @@ Gem::Specification.new do |spec| spec.description = 'A very simple reverse proxy for Roda' spec.homepage = 'https://github.com/BillyRuffian/roda-proxy' spec.license = 'MIT' - spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0') + spec.required_ruby_version = Gem::Requirement.new('>= 2.1.0') spec.metadata['allowed_push_host'] = 'https://rubygems.org' @@ -29,7 +29,6 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ['lib'] - spec.add_dependency 'faraday', '~> 1.0' spec.add_dependency 'roda', '~> 3.0' spec.add_development_dependency 'rerun', '~> 0.13'