Module: Net::HTTPHeader

Defined in:
lib/digest_auth.rb

Constant Summary collapse

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

Instance Method Summary collapse

Instance Method Details

#digest_auth(user, password, response) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/digest_auth.rb', line 10

def digest_auth(user, password, response) # based on http://segment7.net/projects/ruby/snippets/digest_auth.rb 
  @@nonce_count += 1 
  response['www-authenticate'] =~ /^(\w+) (.*)/ 
  params = {} 
  $2.gsub(/(\w+)="(.*?)"/) { params[$1] = $2 } 
  a_1 = "#{user}:#{params['realm']}:#{password}" 
  a_2 = "#{@method}:#{@path}" 
  request_digest = '' 
  request_digest << Digest::MD5.hexdigest(a_1) 
  request_digest << ':' << params['nonce'] 
  request_digest << ':' << ('%08x' % @@nonce_count) 
  request_digest << ':' << CNONCE 
  request_digest << ':' << params['qop'] 
  request_digest << ':' << Digest::MD5.hexdigest(a_2) 
  header = [] 
  header << "Digest username=\"#{user}\"" 
  header << "realm=\"#{params['realm']}\"" 
  header << "qop=#{params['qop']}" 
  header << "algorithm=MD5" 
  header << "uri=\"#{@path}\"" 
  header << "nonce=\"#{params['nonce']}\"" 
  header << "nc=#{'%08x' % @@nonce_count}" 
  header << "cnonce=\"#{CNONCE}\"" 
  header << "response=\"#{Digest::MD5.hexdigest(request_digest)}\"" 
  @header['Authorization'] = header 
end