Commit 9a03a92
Changed files (2)
lib
saml
kit
spec
saml
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