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