Class Mechanize::Chain::AuthHeaders
In: lib/mechanize/chain/auth_headers.rb
Parent: Object
Mechanize\n[lib/mechanize.rb\nlib/mechanize/chain.rb\nlib/mechanize/chain/auth_headers.rb\nlib/mechanize/chain/body_decoding_handler.rb\nlib/mechanize/chain/connection_resolver.rb\nlib/mechanize/chain/custom_headers.rb\nlib/mechanize/chain/handler.rb\nlib/mechanize/chain/header_resolver.rb\nlib/mechanize/chain/parameter_resolver.rb\nlib/mechanize/chain/pre_connect_hook.rb\nlib/mechanize/chain/request_resolver.rb\nlib/mechanize/chain/response_body_parser.rb\nlib/mechanize/chain/response_header_handler.rb\nlib/mechanize/chain/response_reader.rb\nlib/mechanize/chain/ssl_resolver.rb\nlib/mechanize/chain/uri_resolver.rb\nlib/mechanize/content_type_error.rb\nlib/mechanize/cookie.rb\nlib/mechanize/cookie_jar.rb\nlib/mechanize/file.rb\nlib/mechanize/file_response.rb\nlib/mechanize/file_saver.rb\nlib/mechanize/form.rb\nlib/mechanize/form/button.rb\nlib/mechanize/form/check_box.rb\nlib/mechanize/form/field.rb\nlib/mechanize/form/file_upload.rb\nlib/mechanize/form/image_button.rb\nlib/mechanize/form/multi_select_list.rb\nlib/mechanize/form/option.rb\nlib/mechanize/form/radio_button.rb\nlib/mechanize/form/select_list.rb\nlib/mechanize/headers.rb\nlib/mechanize/history.rb\nlib/mechanize/monkey_patch.rb\nlib/mechanize/page.rb\nlib/mechanize/page/base.rb\nlib/mechanize/page/frame.rb\nlib/mechanize/page/image.rb\nlib/mechanize/page/label.rb\nlib/mechanize/page/link.rb\nlib/mechanize/page/meta.rb\nlib/mechanize/pluggable_parsers.rb\nlib/mechanize/redirect_limit_reached_error.rb\nlib/mechanize/redirect_not_get_or_head_error.rb\nlib/mechanize/response_code_error.rb\nlib/mechanize/unsupported_scheme_error.rb\nlib/mechanize/util.rb] WWW dot/f_53.png

Methods

gen_auth_header   handle   new  

Included Modules

Mechanize::Handler

Constants

CNONCE = Digest::MD5.hexdigest("%x" % (Time.now.to_i + rand(65535)))

Public Class methods

[Source]

    # File lib/mechanize/chain/auth_headers.rb, line 9
 9:       def initialize(auth_hash, user, password, digest)
10:         @auth_hash = auth_hash
11:         @user      = user
12:         @password  = password
13:         @digest    = digest
14:       end

Public Instance methods

[Source]

    # File lib/mechanize/chain/auth_headers.rb, line 37
37:       def gen_auth_header(uri, request, auth_header, is_IIS = false)
38:         auth_header =~ /^(\w+) (.*)/
39: 
40:         params = {}
41:         $2.gsub(/(\w+)=("[^"]*"|[^,]*)/) {
42:           params[$1] = $2.gsub(/^"/, '').gsub(/"$/, '')
43:         }
44: 
45:         @@nonce_count[params['nonce']] += 1
46: 
47:         a_1 = "#{@user}:#{params['realm']}:#{@password}"
48:         a_2 = "#{request.method}:#{uri.path}"
49:         request_digest = ''
50:         request_digest << Digest::MD5.hexdigest(a_1)
51:         request_digest << ':' << params['nonce']
52:         request_digest << ':' << ('%08x' % @@nonce_count[params['nonce']])
53:         request_digest << ':' << CNONCE
54:         request_digest << ':' << params['qop']
55:         request_digest << ':' << Digest::MD5.hexdigest(a_2)
56: 
57:         header = ''
58:         header << "Digest username=\"#{@user}\", "
59:         if is_IIS then
60:           header << "qop=\"#{params['qop']}\", "
61:         else
62:           header << "qop=#{params['qop']}, "
63:         end
64:         header << "uri=\"#{uri.path}\", "
65:         header << %w{ algorithm opaque nonce realm }.map { |field|
66:           next unless params[field]
67:           "#{field}=\"#{params[field]}\""
68:         }.compact.join(', ')
69: 
70:         header << ", nc=#{'%08x' % @@nonce_count[params['nonce']]}, "
71:         header << "cnonce=\"#{CNONCE}\", "
72:         header << "response=\"#{Digest::MD5.hexdigest(request_digest)}\""
73: 
74:         return header
75:       end

[Source]

    # File lib/mechanize/chain/auth_headers.rb, line 16
16:       def handle(ctx, params)
17:         uri     = params[:uri]
18:         request = params[:request]
19: 
20:         if( @auth_hash[uri.host] )
21:           case @auth_hash[uri.host]
22:           when :basic
23:             request.basic_auth(@user, @password)
24:           when :iis_digest
25:             digest_response = self.gen_auth_header(uri,request, @digest, true)
26:             request['Authorization'] = digest_response
27:           when :digest
28:             if @digest
29:               digest_response = self.gen_auth_header(uri,request, @digest)
30:               request['Authorization'] = digest_response
31:             end
32:           end
33:         end
34:         super
35:       end

[Validate]