From 2a2d9a2b71eca1b40458129e55831f5874cada56 Mon Sep 17 00:00:00 2001 From: Ben Vandgrift Date: Wed, 29 Aug 2012 13:35:49 -0400 Subject: [PATCH 1/3] added :strip_headers option for matchers and config --- Gemfile.lock | 4 ++-- lib/rack/reverse_proxy.rb | 3 ++- rack-reverse-proxy.gemspec | 2 +- spec/rack/reverse_proxy_spec.rb | 29 +++++++++++++++++++++++++++++ 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 08d427d..43c2da6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - rack-reverse-proxy (0.4.1) + rack-reverse-proxy (0.4.4) rack (>= 1.0.0) GEM @@ -22,7 +22,7 @@ PLATFORMS ruby DEPENDENCIES - bundler (~> 1.0.15) + bundler (~> 1.1.4) rack-reverse-proxy! rack-test (~> 0.5.7) rake (~> 0.8.7) diff --git a/lib/rack/reverse_proxy.rb b/lib/rack/reverse_proxy.rb index ddadd3f..331334e 100644 --- a/lib/rack/reverse_proxy.rb +++ b/lib/rack/reverse_proxy.rb @@ -17,10 +17,11 @@ def call(env) uri = matcher.get_uri(rackreq.fullpath,env) all_opts = @global_options.dup.merge(matcher.options) + all_opts[:strip_headers] ||= [] headers = Rack::Utils::HeaderHash.new env.each { |key, value| if key =~ /HTTP_(.*)/ - headers[$1] = value + headers[$1] = value unless all_opts[:strip_headers].include?($1) end } headers['HOST'] = uri.host if all_opts[:preserve_host] diff --git a/rack-reverse-proxy.gemspec b/rack-reverse-proxy.gemspec index 2fbd435..30d078b 100644 --- a/rack-reverse-proxy.gemspec +++ b/rack-reverse-proxy.gemspec @@ -33,7 +33,7 @@ Gem::Specification.new do |s| ] s.add_development_dependency "rspec", "~> 1.3.2" - s.add_development_dependency "bundler", "~> 1.0.15" + s.add_development_dependency "bundler", "~> 1.1.4" s.add_development_dependency "rake", "~> 0.8.7" s.add_development_dependency "rack-test", "~> 0.5.7" s.add_development_dependency "webmock", "~> 1.5.0" diff --git a/spec/rack/reverse_proxy_spec.rb b/spec/rack/reverse_proxy_spec.rb index 19cf8c2..c023512 100644 --- a/spec/rack/reverse_proxy_spec.rb +++ b/spec/rack/reverse_proxy_spec.rb @@ -62,6 +62,35 @@ def app a_request(:get, 'http://example.com/test/stuff').with(:headers => {'X-Forwarded-Host' => 'example.org'}).should have_been_made end + describe "with :strip_headers specified in the matcher" do + def app + Rack::ReverseProxy.new(dummy_app) do + reverse_proxy '/test', 'http://example.com/', {:strip_headers => ['REFERER']} + end + end + + it "should strip the specified headers" do + stub_request(:any, 'example.com/test/stuff') + get '/test/stuff', {}, {"HTTP_REFERER" => "http://something.bogus"} + a_request(:get, 'http://example.com/test/stuff').with(:headers => {"Referer" => "http://something.bogus"}).should_not have_been_made + end + end + + describe "with :strip_headers specified in the config" do + def app + Rack::ReverseProxy.new(dummy_app) do + reverse_proxy '/test', 'http://example.com/' + reverse_proxy_options :strip_headers => ['REFERER'] + end + end + + it "should strip the specified headers" do + stub_request(:any, 'example.com/test/stuff') + get '/test/stuff', {}, {"HTTP_REFERER" => "http://something.bogus"} + a_request(:get, 'http://example.com/test/stuff').with(:headers => {"Referer" => "http://something.bogus"}).should_not have_been_made + end + end + describe "with preserve host turned off" do def app Rack::ReverseProxy.new(dummy_app) do From 6fab3789d9220bb12f56ee2ef755454a6bbe8da0 Mon Sep 17 00:00:00 2001 From: Ben Vandgrift Date: Wed, 29 Aug 2012 13:40:50 -0400 Subject: [PATCH 2/3] bumping the version and updating the README --- README.rdoc | 3 ++- rack-reverse-proxy.gemspec | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.rdoc b/README.rdoc index be1f0ad..c774d46 100644 --- a/README.rdoc +++ b/README.rdoc @@ -20,7 +20,7 @@ Below is an example for configuring the middleware: use Rack::ReverseProxy do # Set :preserve_host to true globally (default is true already) - reverse_proxy_options :preserve_host => true + reverse_proxy_options :preserve_host => true, :strip_headers => ['REFERER'] # Forward the path /test* to http://example.com/test* reverse_proxy '/test', 'http://example.com/' @@ -40,6 +40,7 @@ reverse_proxy_options sets global options for all reverse proxies. Available opt * :password password for basic auth * :matching is a global only option, if set to :first the first matched url will be requested (no ambigous error). Default: :all. * :timeout seconds to timout the requests +* :strip_headers removes the specified non-prefixed headers ("HTTP_HEADER_NAME" becomes "HEADER_NAME") from the proxy request. Default: [] == Note on Patches/Pull Requests diff --git a/rack-reverse-proxy.gemspec b/rack-reverse-proxy.gemspec index 30d078b..dcfd839 100644 --- a/rack-reverse-proxy.gemspec +++ b/rack-reverse-proxy.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |s| s.name = %q{rack-reverse-proxy} - s.version = "0.4.4" + s.version = "0.4.5" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Jon Swope"] From 68b821e809b394fc043b3baffcd88f51030a4dc7 Mon Sep 17 00:00:00 2001 From: Ben Vandgrift Date: Wed, 10 Oct 2012 14:26:01 -0400 Subject: [PATCH 3/3] .rvmrc, Guardfile, and Gemfile.lock --- .rvmrc | 1 + Gemfile.lock | 8 ++++---- Guardfile | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 .rvmrc create mode 100644 Guardfile diff --git a/.rvmrc b/.rvmrc new file mode 100644 index 0000000..9a45e07 --- /dev/null +++ b/.rvmrc @@ -0,0 +1 @@ +rvm use ruby-1.9.3@rack-reverse-proxy --create diff --git a/Gemfile.lock b/Gemfile.lock index 43c2da6..4461c30 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,15 +1,15 @@ PATH remote: . specs: - rack-reverse-proxy (0.4.4) + rack-reverse-proxy (0.4.5) rack (>= 1.0.0) GEM remote: http://rubygems.org/ specs: - addressable (2.2.6) - crack (0.1.8) - rack (1.3.2) + addressable (2.3.2) + crack (0.3.1) + rack (1.4.1) rack-test (0.5.7) rack (>= 1.0) rake (0.8.7) diff --git a/Guardfile b/Guardfile new file mode 100644 index 0000000..8252ffa --- /dev/null +++ b/Guardfile @@ -0,0 +1,2 @@ +# A sample Guardfile +# More info at https://github.com/guard/guard#readme