45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# 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
|