| Class | WWW::Mechanize::Chain::AuthHeaders |
| In: |
lib/www/mechanize/chain/auth_headers.rb
|
| Parent: | Object |
| CNONCE | = | Digest::MD5.hexdigest("%x" % (Time.now.to_i + rand(65535))) |
# 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
# File lib/www/mechanize/chain/auth_headers.rb, line 38
38: def gen_auth_header(uri, request, auth_header, is_IIS = false)
39: auth_header =~ /^(\w+) (.*)/
40:
41: params = {}
42: $2.gsub(/(\w+)=("[^"]*"|[^,]*)/) {
43: params[$1] = $2.gsub(/^"/, '').gsub(/"$/, '')
44: }
45:
46: @@nonce_count[params['nonce']] += 1
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[params['nonce']])
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[params['nonce']]}, "
72: header << "cnonce=\"#{CNONCE}\", "
73: header << "response=\"#{Digest::MD5.hexdigest(request_digest)}\""
74:
75: return header
76: end
# 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