Sha256: 29857094d83c8993e7ae6e7823da6860796177c6e12e81f6d1100c5ab99cbcbc

Contents?: true

Size: 1019 Bytes

Versions: 8

Compression:

Stored size: 1019 Bytes

Contents

require 'digest/md5'
require 'net/http'

module Net
  module HTTPHeader
    def digest_auth(user, password, response)
      response['www-authenticate'] =~ /^(\w+) (.*)/

      params = {}
      $2.gsub(/(\w+)="(.*?)"/) { params[$1] = $2 }
      params.merge!("cnonce" => Digest::MD5.hexdigest("%x" % (Time.now.to_i + rand(65535))))

      a_1 = Digest::MD5.hexdigest("#{user}:#{params['realm']}:#{password}")
      a_2 = Digest::MD5.hexdigest("#{@method}:#{@path}")

      request_digest = Digest::MD5.hexdigest(
        [a_1, params['nonce'], "0", params['cnonce'], params['qop'], a_2].join(":")
      )

      header = [
        %Q(Digest username="#{user}"),
        %Q(realm="#{params['realm']}"),
        %Q(qop="#{params['qop']}"),
        %Q(uri="#{@path}"),
        %Q(nonce="#{params['nonce']}"),
        %Q(nc="0"),
        %Q(cnonce="#{params['cnonce']}"),
        %Q(opaque="#{params['opaque']}"),
        %Q(response="#{request_digest}")
      ]

      @header['Authorization'] = header
    end
  end
end

Version data entries

8 entries across 8 versions & 5 rubygems

Version Path
httparty-0.7.2 lib/httparty/net_digest_auth.rb
httparty-0.7.0 lib/httparty/net_digest_auth.rb
httpotato-1.0.2 lib/httpotato/net_digest_auth.rb
dnclabs-httparty-0.6.1.2010090201 lib/httparty/net_digest_auth.rb
bartzon-httparty-0.6.1 lib/httparty/net_digest_auth.rb
httparty-0.6.1 lib/httparty/net_digest_auth.rb
httparty-0.6.0 lib/httparty/net_digest_auth.rb
jugend-httparty-0.5.3.4 lib/httparty/net_digest_auth.rb