Commit 85b61fa

mo <mo@mokhan.ca>
2017-11-07 22:53:20
start to build the logout request.
1 parent 8897ee9
Changed files (3)
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