Commit 3d4909c

mo <mo.khan@gmail.com>
2018-02-16 18:52:07
allow deserializing raw query string.
1 parent c90871f
Changed files (3)
lib
spec
lib/saml/kit/bindings/http_redirect.rb
@@ -17,7 +17,7 @@ module Saml
         end
 
         def deserialize(params, configuration: Saml::Kit.configuration)
-          parameters = normalize(params)
+          parameters = normalize(params_to_hash(params))
           document = deserialize_document_from!(parameters, configuration)
           ensure_valid_signature!(parameters, document)
           document
@@ -74,6 +74,11 @@ module Saml
             SigAlg: params['SigAlg'] || params[:SigAlg],
           }
         end
+
+        def params_to_hash(value)
+          return value unless value.is_a?(String)
+          Hash[URI.parse(value).query.split('&').map { |x| x.split('=', 2) }]
+        end
       end
     end
   end
lib/saml/kit.rb
@@ -12,6 +12,7 @@ require "logger"
 require "net/http"
 require "nokogiri"
 require "securerandom"
+require "uri"
 require "xml/kit"
 
 require "saml/kit/buildable"
spec/saml/bindings/http_redirect_spec.rb
@@ -35,6 +35,12 @@ RSpec.describe Saml::Kit::Bindings::HttpRedirect do
       expect(result).to be_instance_of(Saml::Kit::AuthenticationRequest)
     end
 
+    it 'deserializes the raw query_string to an AuthnRequest' do
+      url, _ = subject.serialize(Saml::Kit::AuthenticationRequest.builder, relay_state: "HELLO")
+      result = subject.deserialize(url)
+      expect(result).to be_instance_of(Saml::Kit::AuthenticationRequest)
+    end
+
     it 'deserializes the SAMLRequest to an AuthnRequest with symbols for keys' do
       configuration = Saml::Kit::Configuration.new do |config|
         config.entity_id = entity_id