typhoeus 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,11 +17,22 @@ module Typhoeus
17
17
  :CURLOPT_NOSIGNAL => 99,
18
18
  :CURLOPT_HTTPHEADER => 10023,
19
19
  :CURLOPT_FOLLOWLOCATION => 52,
20
- :CURLOPT_MAXREDIRS => 68
20
+ :CURLOPT_MAXREDIRS => 68,
21
+ :CURLOPT_HTTPAUTH => 107,
22
+ :CURLOPT_USERPWD => 10000 + 5,
23
+ :CURLOPT_VERBOSE => 41
21
24
  }
22
25
  INFO_VALUES = {
23
26
  :CURLINFO_RESPONSE_CODE => 2097154,
24
- :CURLINFO_TOTAL_TIME => 3145731
27
+ :CURLINFO_TOTAL_TIME => 3145731,
28
+ :CURLINFO_HTTPAUTH_AVAIL => 0x200000 + 23
29
+ }
30
+ AUTH_TYPES = {
31
+ :CURLAUTH_BASIC => 1,
32
+ :CURLAUTH_DIGEST => 2,
33
+ :CURLAUTH_GSSNEGOTIATE => 4,
34
+ :CURLAUTH_NTLM => 8,
35
+ :CURLAUTH_DIGEST_IE => 16
25
36
  }
26
37
 
27
38
  def initialize
@@ -34,6 +45,19 @@ module Typhoeus
34
45
  @headers = hash
35
46
  end
36
47
 
48
+ def auth=(authinfo)
49
+ set_option(OPTION_VALUES[:CURLOPT_USERPWD], "#{authinfo[:username]}:#{authinfo[:password]}")
50
+ set_option(OPTION_VALUES[:CURLOPT_HTTPAUTH], authinfo[:method]) if authinfo[:method]
51
+ end
52
+
53
+ def auth_methods
54
+ get_info_long(INFO_VALUES[:CURLINFO_HTTPAUTH_AVAIL])
55
+ end
56
+
57
+ def verbose=(boolean)
58
+ set_option(OPTION_VALUES[:CURLOPT_VERBOSE], !!boolean ? 1 : 0)
59
+ end
60
+
37
61
  def total_time_taken
38
62
  get_info_double(INFO_VALUES[:CURLINFO_TOTAL_TIME])
39
63
  end
@@ -25,6 +25,29 @@ get '/bad_redirect' do
25
25
  redirect '/bad_redirect'
26
26
  end
27
27
 
28
+ get '/auth_basic/:username/:password' do
29
+ @auth ||= Rack::Auth::Basic::Request.new(request.env)
30
+ # Check that we've got a basic auth, and that it's credentials match the ones
31
+ # provided in the request
32
+ if @auth.provided? && @auth.basic? && @auth.credentials == [ params[:username], params[:password] ]
33
+ # auth is valid - confirm it
34
+ true
35
+ else
36
+ # invalid auth - request the authentication
37
+ response['WWW-Authenticate'] = %(Basic realm="Testing HTTP Auth")
38
+ throw(:halt, [401, "Not authorized\n"])
39
+ end
40
+ end
41
+
42
+ get '/auth_ntlm' do
43
+ # we're just checking for the existence if NTLM auth header here. It's validation
44
+ # is too troublesome and really doesn't bother is much, it's up to libcurl to make
45
+ # it valid
46
+ is_ntlm_auth = /^NTLM/ =~ request.env['HTTP_AUTHORIZATION']
47
+ true if is_ntlm_auth
48
+ throw(:halt, [401, "Not authorized\n"]) if !is_ntlm_auth
49
+ end
50
+
28
51
  get '/**' do
29
52
  sleep params["delay"].to_i if params.has_key?("delay")
30
53
  request.env.merge!(:body => request.body.read).to_json
@@ -61,6 +61,35 @@ describe Typhoeus::Easy do
61
61
  end
62
62
  end
63
63
 
64
+ describe "authentication" do
65
+ it "should allow to set username and password" do
66
+ e = Typhoeus::Easy.new
67
+ username, password = 'foo', 'bar'
68
+ e.auth = { :username => username, :password => password }
69
+ e.url = "http://localhost:3001/auth_basic/#{username}/#{password}"
70
+ e.method = :get
71
+ e.perform
72
+ e.response_code.should == 200
73
+ end
74
+
75
+ it "should allow to query auth methods support by the server" do
76
+ e = Typhoeus::Easy.new
77
+ e.url = "http://localhost:3001/auth_basic/foo/bar"
78
+ e.method = :get
79
+ e.perform
80
+ e.auth_methods.should == Typhoeus::Easy::AUTH_TYPES[:CURLAUTH_BASIC]
81
+ end
82
+
83
+ it "should allow to set authentication method" do
84
+ e = Typhoeus::Easy.new
85
+ e.auth = { :username => 'username', :password => 'password', :method => Typhoeus::Easy::AUTH_TYPES[:CURLAUTH_NTLM] }
86
+ e.url = "http://localhost:3001/auth_ntlm"
87
+ e.method = :get
88
+ e.perform
89
+ e.response_code.should == 200
90
+ end
91
+ end
92
+
64
93
  describe "get" do
65
94
  it "should perform a get" do
66
95
  easy = Typhoeus::Easy.new
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typhoeus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Dix