module Passwordstate::NetHTTPExtensions

Public Instance Methods

request(req, body = nil) { |res| ... } click to toggle source
Calls superclass method
# File lib/passwordstate/util.rb, line 45
def request(req, body = nil, &block)
  return super(req, body, &block) if req.ntlm_auth_information.nil?

  unless started?
    @last_body = req.body
    req.body = nil
    start do
      req.delete('connection')
      return request(req, body, &block)
    end
  end

  type1 = Net::NTLM::Message::Type1.new
  req['authorization'] = 'NTLM ' + type1.encode64
  res = super(req, body)

  challenge = res['www-authenticate'][/(?:NTLM|Negotiate) (.+)/, 1]

  if challenge && res.code == '401'
    type2 = Net::NTLM::Message.decode64 challenge
    type3 = type2.response(req.ntlm_auth_information, req.ntlm_auth_options.dup)

    req['authorization'] = 'NTLM ' + type3.encode64
    req.body_stream.rewind if req.body_stream
    req.body = @last_body if @last_body

    super(req, body, &block)
  else
    yield res if block_given?
    res
  end
end