Commit 9a03a92

mo <mo.khan@gmail.com>
2017-11-14 01:58:47
return the properly parsed request.
1 parent 1954f81
Changed files (2)
lib
saml
spec
lib/saml/kit/request.rb
@@ -2,8 +2,13 @@ module Saml
   module Kit
     class Request
       def self.deserialize(raw_request)
-        request = Saml::Kit::Content.decode_raw_saml(raw_request)
-        AuthenticationRequest.new(request)
+        xml = Saml::Kit::Content.decode_raw_saml(raw_request)
+        hash = Hash.from_xml(xml)
+        if hash['AuthnRequest'].present?
+          AuthenticationRequest.new(xml)
+        else
+          LogoutRequest.new(xml)
+        end
       rescue => error
         Saml::Kit.logger.error(error)
         InvalidRequest.new(raw_request)
spec/saml/request_spec.rb
@@ -29,5 +29,14 @@ RSpec.describe Saml::Kit::Request do
     it 'returns an invalid request when the raw request is corrupted' do
       expect(subject.deserialize("nonsense")).to be_invalid
     end
+
+    it 'returns a logout request' do
+      user = double(:user, name_id_for: SecureRandom.uuid)
+      builder = Saml::Kit::LogoutRequest::Builder.new(user)
+
+      result = subject.deserialize(builder.build.serialize)
+      expect(result).to be_instance_of(Saml::Kit::LogoutRequest)
+      expect(result.name_id).to eql(user.name_id_for)
+    end
   end
 end