Module: HTTPX::Plugins::DigestAuthentication::InstanceMethods

Defined in:
lib/httpx/plugins/digest_authentication.rb

Instance Method Summary collapse

Instance Method Details

#digest_authentication(user, password) ⇒ Object Also known as: digest_auth



37
38
39
# File 'lib/httpx/plugins/digest_authentication.rb', line 37

def digest_authentication(user, password)
  with(digest: Digest.new(user, password))
end

#send_requests(*requests) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/httpx/plugins/digest_authentication.rb', line 43

def send_requests(*requests)
  requests.flat_map do |request|
    digest = request.options.digest

    if digest
      probe_response = wrap { super(request).first }

      if digest && !probe_response.is_a?(ErrorResponse) &&
         probe_response.status == 401 && probe_response.headers.key?("www-authenticate") &&
         /Digest .*/.match?(probe_response.headers["www-authenticate"])

        request.transition(:idle)

        token = digest.generate_header(request, probe_response)
        request.headers["authorization"] = "Digest #{token}"

        super(request)
      else
        probe_response
      end
    else
      super(request)
    end
  end
end