Commit f649199
2017-11-14 01:58:47
1 parent
8de60c4
Changed files (3)
proof
app
controllers
saml-kit
lib
saml
kit
spec
saml
proof/app/controllers/sessions_controller.rb
@@ -1,6 +1,6 @@
class SessionsController < ApplicationController
skip_before_action :verify_authenticity_token, only: [:new, :destroy]
- before_action :load_saml_request, only: [:new, :create]
+ before_action :load_saml_request, only: [:new, :create, :destroy]
def new
session[:SAMLRequest] ||= params[:SAMLRequest]
saml-kit/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)
saml-kit/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