Parent

Included Modules

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
def initialize(auth_hash, user, password, digest)
  @auth_hash = auth_hash
  @user      = user
  @password  = password
  @digest    = digest
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
def gen_auth_header(uri, request, auth_header, is_IIS = false)
  auth_header =~ /^(\w+) (.*)/

  params = {}
  $2.gsub(/(\w+)=("[^"]*"|[^,]*)/) {
    params[$1] = $2.gsub(/^"/, '').gsub(/"$/, '')
  }

  @@nonce_count[params['nonce']] += 1

  a_1 = "#{@user}:#{params['realm']}:#{@password}"
  a_2 = "#{request.method}:#{uri.path}"
  request_digest = ''
  request_digest << Digest::MD5.hexdigest(a_1)
  request_digest << ':' << params['nonce']
  request_digest << ':' << ('%08x' % @@nonce_count[params['nonce']])
  request_digest << ':' << CNONCE
  request_digest << ':' << params['qop']
  request_digest << ':' << Digest::MD5.hexdigest(a_2)

  header = ''
  header << "Digest username=\"#{@user}\", "
  if is_IIS then
    header << "qop=\"#{params['qop']}\", "
  else
    header << "qop=#{params['qop']}, "
  end
  header << "uri=\"#{uri.path}\", "
  header << %{ algorithm opaque nonce realm }.map { |field|
    next unless params[field]
    "#{field}=\"#{params[field]}\""
  }.compact.join(', ')

  header << ", nc=#{'%08x' % @@nonce_count[params['nonce']]}, "
  header << "cnonce=\"#{CNONCE}\", "
  header << "response=\"#{Digest::MD5.hexdigest(request_digest)}\""

  return header
end
handle(ctx, params) click to toggle source
# File lib/mechanize/chain/auth_headers.rb, line 16
def handle(ctx, params)
  uri     = params[:uri]
  request = params[:request]

  if( @auth_hash[uri.host] )
    case @auth_hash[uri.host]
    when :basic
      request.basic_auth(@user, @password)
    when :iis_digest
      digest_response = self.gen_auth_header(uri,request, @digest, true)
      request['Authorization'] = digest_response
    when :digest
      if @digest
        digest_response = self.gen_auth_header(uri,request, @digest)
        request['Authorization'] = digest_response
      end
    end
  end
  super
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.