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

Methods

gen_auth_header   handle   new  

Included Modules

WWW::Handler

Constants

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

Public Class methods

[Source]

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

Public Instance methods

[Source]

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

[Source]

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

[Validate]