Skip to content

Commit

Permalink
Support HTTP Basic auth in Rack adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
milgner committed Oct 19, 2015
1 parent a56015b commit 6d9d0ab
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
19 changes: 13 additions & 6 deletions lib/httpi/adapter/rack.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
require 'base64'
require 'httpi/adapter/base'
require 'httpi/response'

Expand Down Expand Up @@ -61,17 +62,18 @@ def request(method)
raise NotSupportedError, "Rack adapter does not support custom HTTP methods"
end

env = {}
@request.headers.each do |header, value|
env["HTTP_#{header.gsub('-', '_').upcase}"] = value
end

if @request.proxy
raise NotSupportedError, "Rack adapter does not support proxying"
end

if @request.auth.http?
raise NotSupportedError, "Rack adapter does not support HTTP auth"
if @request.auth.basic?
basic_auth = @request.auth.basic.join(':')
encoded = Base64.encode64(basic_auth).gsub('\n', '')
@request.headers['Authorization'] = "Basic #{encoded}"
else
raise NotSupportedError, "Rack adapter does not support HTTP #{@request.auth.type} auth"
end
end

if @request.auth.ssl?
Expand All @@ -82,6 +84,11 @@ def request(method)
raise NotSupportedError, "Rack adapter does not support response streaming"
end

env = {}
@request.headers.each do |header, value|
env["HTTP_#{header.gsub('-', '_').upcase}"] = value
end

response = @client.request(method.to_s.upcase, @request.url.to_s,
{ :fatal => true, :input => @request.body.to_s }.merge(env))

Expand Down
14 changes: 6 additions & 8 deletions spec/httpi/adapter/rack_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,12 @@
end
end

describe "set_auth" do
before do
request.auth.basic "username", "password"
end

it "is not supported" do
expect { client.request(:get) }.
to raise_error(HTTPI::NotSupportedError, "Rack adapter does not support HTTP auth")
describe "basic auth" do
it "is supported" do
request = HTTPI::Request.new(@url + "basic-auth")
request.auth.basic("admin", "secret")
response = HTTPI.get(request, adapter)
expect(response.body).to eq("basic-auth")
end
end

Expand Down

0 comments on commit 6d9d0ab

Please sign in to comment.