Parent

Included Modules

Class Index [+]

Quicksearch

Mechanize::Chain::AuthHeaders

Constants

CNONCE

Public Class Methods

new(auth_hash, user, password, digest) click to toggle 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

gen_auth_header(uri, request, auth_header, is_IIS = false) click to toggle 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 << %{ 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
handle(ctx, params) click to toggle 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

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.