]> git.openstreetmap.org Git - rails.git/blobdiff - config/initializers/oauth.rb
Merge remote-tracking branch 'upstream/pull/2858'
[rails.git] / config / initializers / oauth.rb
index 3b4f06a2e66277c2856ca87650fea36b0b264d59..2e2f45ab88e1c46667b09719f07ca7880d238936 100644 (file)
@@ -16,6 +16,7 @@ end
 module OpenStreetMap
   module ProviderController
     def self.prepended(mod)
+      super
       mod.singleton_class.prepend(OpenStreetMap::ProviderController::ClassMethods)
     end
 
@@ -47,6 +48,26 @@ module OpenStreetMap
       end
     end
   end
+
+  module OAuthFilter
+    def oauth1_verify(request, options = {}, &block)
+      signature = OAuth::Signature.build(request, options, &block)
+      return false unless OauthNonce.remember(signature.request.nonce, signature.request.timestamp)
+
+      value = signature.verify
+      if request.ssl? && !value
+        http_request = request.dup
+        http_request.define_singleton_method(:scheme) { "http" }
+        http_request.define_singleton_method(:port) { 80 }
+        signature = OAuth::Signature.build(http_request, options, &block)
+        value = signature.verify
+      end
+      value
+    rescue OAuth::Signature::UnknownSignatureMethod
+      false
+    end
+  end
 end
 
 OAuth::Controllers::ProviderController.prepend(OpenStreetMap::ProviderController)
+OAuth::Rack::OAuthFilter.prepend(OpenStreetMap::OAuthFilter)