Skip to content

oath gem does not work with jruby #21

Description

@jeffContext

0.4.4 gem does not work with jruby (v.1.5.6.) It works fine with ruby MRI.

Stack trace:

 [java] ArgumentError (wrong # of arguments(3 for 2)):
     [java]   gems/gems/oauth-0.4.4/lib/oauth/signature/hmac/base.rb:12:in `digest'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/signature/base.rb:65:in `signature'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/signature.rb:23:in `sign'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/client/helper.rb:45:in `signature'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/client/helper.rb:75:in `header'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/client/net_http.rb:90:in `set_oauth_header'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/client/net_http.rb:30:in `oauth!'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/consumer.rb:225:in `sign!'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/consumer.rb:191:in `create_signed_request'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/consumer.rb:162:in `request'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/consumer.rb:197:in `token_request'
     [java]   gems/gems/oauth-0.4.4/lib/oauth/consumer.rb:139:in `get_request_token'
     [java]   app/controllers/twitter_controller.rb:9:in `authorize'
     [java]   gems/gems/actionpack-3.0.3/lib/action_controller/metal/implicit_render.rb:4:in `send_action'
     [java]   gems/gems/actionpack-3.0.3/lib/abstract_controller/base.rb:151:in `process_action'
     [java]   gems/gems/actionpack-3.0.3/lib/action_controller/metal/rendering.rb:11:in `process_action'
     [java]   gems/gems/actionpack-3.0.3/lib/abstract_controller/callbacks.rb:18:in `process_action'
     [java]   gems/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:438:in `_run__1732945617__process_action__259020027__callbacks'
     [java]   gems/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:424:in `_run_process_action_callbacks'
     [java]   gems/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:93:in `run_callbacks'
     [java]   gems/gems/actionpack-3.0.3/lib/abstract_controller/callbacks.rb:17:in `process_action'
     [java]   gems/gems/actionpack-3.0.3/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
     [java]   gems/gems/activesupport-3.0.3/lib/active_support/notifications.rb:52:in `instrument'
     [java]   gems/gems/activesupport-3.0.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
     [java]   gems/gems/activesupport-3.0.3/lib/active_support/notifications.rb:52:in `instrument'
     [java]   gems/gems/actionpack-3.0.3/lib/action_controller/metal/instrumentation.rb:29:in `process_action'
     [java]   gems/gems/actionpack-3.0.3/lib/action_controller/metal/rescue.rb:17:in `process_action'
     [java]   gems/gems/actionpack-3.0.3/lib/abstract_controller/base.rb:120:in `process'
     [java]   gems/gems/actionpack-3.0.3/lib/abstract_controller/rendering.rb:40:in `process'
     [java]   gems/gems/actionpack-3.0.3/lib/action_controller/metal.rb:138:in `dispatch'
     [java]   gems/gems/actionpack-3.0.3/lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
     [java]   gems/gems/actionpack-3.0.3/lib/action_controller/metal.rb:178:in `action'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:62:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:62:in `dispatch'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:27:in `call'
     [java]   gems/gems/rack-mount-0.6.13/lib/rack/mount/route_set.rb:148:in `call'
     [java]   gems/gems/rack-mount-0.6.13/lib/rack/mount/code_generation.rb:111:in `recognize'
     [java]   gems/gems/rack-mount-0.6.13/lib/rack/mount/code_generation.rb:73:in `optimized_each'
     [java]   gems/gems/rack-mount-0.6.13/lib/rack/mount/code_generation.rb:110:in `recognize'
     [java]   gems/gems/rack-mount-0.6.13/lib/rack/mount/route_set.rb:139:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/routing/route_set.rb:492:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/head.rb:14:in `call'
     [java]   gems/gems/rack-1.2.1/lib/rack/methodoverride.rb:24:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/params_parser.rb:21:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/flash.rb:182:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/session/abstract_store.rb:149:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/cookies.rb:295:in `call'
     [java]   gems/gems/activerecord-3.0.3/lib/active_record/query_cache.rb:32:in `call'
     [java]   gems/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/query_cache.rb:28:in `cache'
     [java]   gems/gems/activerecord-3.0.3/lib/active_record/query_cache.rb:12:in `cache'
     [java]   gems/gems/activerecord-3.0.3/lib/active_record/query_cache.rb:31:in `call'
     [java]   gems/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:353:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/callbacks.rb:46:in `call'
     [java]   gems/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:430:in `_run_call_callbacks'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/callbacks.rb:44:in `call'
     [java]   gems/gems/rack-1.2.1/lib/rack/sendfile.rb:107:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
     [java]   gems/gems/actionpack-3.0.3/lib/action_dispatch/middleware/show_exceptions.rb:46:in `call'
     [java]   gems/gems/railties-3.0.3/lib/rails/rack/logger.rb:13:in `call'
     [java]   gems/gems/rack-1.2.1/lib/rack/runtime.rb:17:in `call'
     [java]   gems/gems/railties-3.0.3/lib/rails/application.rb:168:in `call'
     [java]   file:lib/jruby-rack-1.0.3.jar!/rack/handler/servlet.rb:19:in `call'
     [java]   :1
     [java] 

Someone shared a hack that works around the problem:
--- a/WebContent/WEB-INF/gems/gems/oauth-0.4.4/lib/oauth/signature/hmac/base.rb
+++ b/WebContent/WEB-INF/gems/gems/oauth-0.4.4/lib/oauth/signature/hmac/base.rb
@@ -2,6 +2,7 @@

     require 'oauth/signature/base'
     require 'digest/hmac'
    +require 'openssl'

     module OAuth::Signature::HMAC
       class Base < OAuth::Signature::Base
    @@ -9,7 +10,8 @@ module OAuth::Signature::HMAC
       private
         def digest
           self.class.digest_class Object.module_eval("::Digest::#{self.class.digest_klass}")
    -      Digest::HMAC.digest(signature_base_string, secret, self.class.digest_class)
    +      digest  = OpenSSL::Digest::Digest.new('sha1')
    +      OpenSSL::HMAC.digest(digest, secret, signature_base_string)
         end
       end
     end

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions