Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

undefined method handle for class Mechanize::Chain::AuthHeaders #4

Open
iGallina opened this issue Apr 2, 2014 · 1 comment
Open

Comments

@iGallina
Copy link

iGallina commented Apr 2, 2014

I've just required your gem, and got this while using on a Rake Task...
undefined method 'handle' for class 'Mechanize::Chain::AuthHeaders' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/ruby-ntlm-0.0.1/lib/ntlm/mechanize.rb:9:in '<class:AuthHeaders>' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/ruby-ntlm-0.0.1/lib/ntlm/mechanize.rb:6:in '<class:Chain>' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/ruby-ntlm-0.0.1/lib/ntlm/mechanize.rb:5:in '<class:Mechanize>' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/ruby-ntlm-0.0.1/lib/ntlm/mechanize.rb:4:in '<top (required)>' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:229:in 'require' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:229:in 'block in require' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:214:in 'load_dependency' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:229:in 'require' /Users/iangallina/projetos/gtdi/lib/tasks/processa_xml.rake:3:in '<top (required)>' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:223:in 'load' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:223:in 'block in load' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:214:in 'load_dependency' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/activesupport-4.0.1/lib/active_support/dependencies.rb:223:in 'load' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/railties-4.0.1/lib/rails/engine.rb:641:in 'block in run_tasks_blocks' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/railties-4.0.1/lib/rails/engine.rb:641:in 'each' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/railties-4.0.1/lib/rails/engine.rb:641:in 'run_tasks_blocks' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/railties-4.0.1/lib/rails/application.rb:244:in 'run_tasks_blocks' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/railties-4.0.1/lib/rails/engine.rb:446:in 'load_tasks' /Users/iangallina/projetos/gtdi/vendor/bundle/gems/railties-4.0.1/lib/rails/railtie/configurable.rb:30:in 'method_missing' /Users/iangallina/projetos/gtdi/Rakefile:6:in '<top (required)>'

@macks
Copy link
Owner

macks commented Sep 17, 2014

ruby-ntlm doesn't work well with recent Mechanize library.
Recent Mechanize has native support for NTLM authentication mechanism, so I'll remove 'ntlm/mechanize' from ruby-ntlm.

If you do want to use ruby-ntlm with Mechanize, apply following patch to mechanize.

--- a/lib/mechanize/http/agent.rb
+++ b/lib/mechanize/http/agent.rb
@@ -1,5 +1,5 @@
 require 'tempfile'
-require 'net/ntlm'
+require 'ntlm'
 require 'kconv'
 require 'webrobots'

@@ -750,17 +750,15 @@ class Mechanize::HTTP::Agent
       existing_realms << realm

       if challenge.params then
-        type_2 = Net::NTLM::Message.decode64 challenge.params
+        type_2 = challenge.params.unpack('m').first

         user, password, domain = @auth_store.credentials_for uri, nil

-        type_3 = type_2.response({ :user => user, :password => password,
-                                   :domain => domain },
-                                 { :ntlmv2 => true }).encode64
+        type_3 = ::NTLM.authenticate(type_2, user, domain, password).to_base64

         headers['Authorization'] = "NTLM #{type_3}"
       else
-        type_1 = Net::NTLM::Message::Type1.new.encode64
+        type_1 = ::NTLM.negotiate.to_base64
         headers['Authorization'] = "NTLM #{type_1}"
       end
     elsif challenge = challenges.find { |c| c.scheme == 'Basic' } then

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants