Commit 85b61fa
Changed files (3)
lib
saml
spec
lib/saml/kit/logout_request.rb
@@ -0,0 +1,31 @@
+module Saml
+ module Kit
+ class LogoutRequest
+ class Builder
+ attr_accessor :destination, :id, :now
+
+ def initialize
+ @id = SecureRandom.uuid
+ @now = Time.now
+ end
+
+ def to_xml(xml = ::Builder::XmlMarkup.new)
+ xml.LogoutRequest logout_request_options do
+ end
+ end
+
+ private
+
+ def logout_request_options
+ {
+ "xmlns" => Saml::Kit::Namespaces::PROTOCOL,
+ Destination: destination,
+ ID: id,
+ IssueInstant: now.utc.iso8601,
+ Version: "2.0",
+ }
+ end
+ end
+ end
+ end
+end
lib/saml/kit.rb
@@ -16,6 +16,7 @@ require "saml/kit/authentication_request"
require "saml/kit/configuration"
require "saml/kit/default_registry"
require "saml/kit/fingerprint"
+require "saml/kit/logout_request"
require "saml/kit/namespaces"
require "saml/kit/metadata"
require "saml/kit/request"
spec/saml/logout_request_spec.rb
@@ -0,0 +1,20 @@
+require 'spec_helper'
+
+RSpec.describe Saml::Kit::LogoutRequest do
+ describe described_class::Builder do
+ let(:logout_url) { FFaker::Internet.http_url }
+
+ it 'includes a LogoutRequest element' do
+ travel_to 1.second.from_now
+ subject.destination = logout_url
+ result = Hash.from_xml(subject.to_xml)
+
+ expect(result['LogoutRequest']).to be_present
+ expect(result['LogoutRequest']['ID']).to be_present
+ expect(result['LogoutRequest']['Version']).to eql("2.0")
+ expect(result['LogoutRequest']['IssueInstant']).to eql(Time.now.utc.iso8601)
+ expect(result['LogoutRequest']['Destination']).to eql(logout_url)
+ expect(result['LogoutRequest']['xmlns']).to eql(Saml::Kit::Namespaces::PROTOCOL)
+ end
+ end
+end