Commit e738b47

mo <mo@mokhan.ca>
2017-11-06 03:06:45
parse nameid.
1 parent 86f5f9e
Changed files (2)
lib/saml/kit/authentication_request.rb
@@ -32,6 +32,10 @@ module Saml
         @hash[name]['Issuer']
       end
 
+      def name_id_format
+        @hash[name]['NameIDPolicy']['Format']
+      end
+
       def certificate
         @hash[name]['Signature']['KeyInfo']['X509Data']['X509Certificate']
       end
@@ -102,7 +106,7 @@ module Saml
           @id = SecureRandom.uuid
           @issued_at = Time.now.utc
           @issuer = configuration.issuer
-          @name_id_format = Namespaces::EMAIL_ADDRESS
+          @name_id_format = Namespaces::PERSISTENT
         end
 
         def to_xml(xml = ::Builder::XmlMarkup.new)
@@ -127,7 +131,7 @@ module Saml
             "xmlns:saml" => Namespaces::ASSERTION,
             ID: "_#{id}",
             Version: "2.0",
-            IssueInstant: issued_at.strftime("%Y-%m-%dT%H:%M:%SZ"),
+            IssueInstant: issued_at.utc.iso8601,
           }
           options[:AssertionConsumerServiceURL] = acs_url if acs_url.present?
           options
spec/saml/authentication_request_spec.rb
@@ -5,18 +5,21 @@ RSpec.describe Saml::Kit::AuthenticationRequest do
   let(:id) { SecureRandom.uuid }
   let(:acs_url) { "https://#{FFaker::Internet.domain_name}/acs" }
   let(:issuer) { FFaker::Movie.title }
+  let(:name_id_format) { Saml::Kit::Namespaces::EMAIL_ADDRESS }
   let(:raw_xml) do
     builder = described_class::Builder.new
     builder.id = id
     builder.issued_at = Time.now.utc
     builder.issuer = issuer
     builder.acs_url = acs_url
+    builder.name_id_format = name_id_format
     builder.to_xml
   end
 
   it { expect(subject.issuer).to eql(issuer) }
   it { expect(subject.id).to eql("_#{id}") }
   it { expect(subject.acs_url).to eql(acs_url) }
+  it { expect(subject.name_id_format).to eql(name_id_format) }
 
   describe "#to_xml" do
     subject { described_class::Builder.new(configuration) }
@@ -29,16 +32,16 @@ RSpec.describe Saml::Kit::AuthenticationRequest do
     let(:acs_url) { "https://airport.dev/session/acs" }
 
     it 'returns a valid authentication request' do
-      travel_to DateTime.new(2014, 7, 16, 23, 52, 45)
+      travel_to 1.second.from_now
       subject.acs_url = acs_url
       result = Hash.from_xml(subject.to_xml)
 
       expect(result['AuthnRequest']['ID']).to be_present
       expect(result['AuthnRequest']['Version']).to eql('2.0')
-      expect(result['AuthnRequest']['IssueInstant']).to eql('2014-07-16T23:52:45Z')
+      expect(result['AuthnRequest']['IssueInstant']).to eql(Time.now.utc.iso8601)
       expect(result['AuthnRequest']['AssertionConsumerServiceURL']).to eql(acs_url)
       expect(result['AuthnRequest']['Issuer']).to eql(issuer)
-      expect(result['AuthnRequest']['NameIDPolicy']['Format']).to eql("urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress")
+      expect(result['AuthnRequest']['NameIDPolicy']['Format']).to eql(Saml::Kit::Namespaces::PERSISTENT)
     end
   end