Commit 762b8fd

mo <mo.khan@gmail.com>
2017-10-22 21:43:31
add response conditions.
1 parent 19c1e76
Changed files (2)
app/models/saml_response.rb
@@ -39,6 +39,11 @@ class SamlResponse
               xml.SubjectConfirmationData "", subject_confirmation_data_options
             end
           end
+          xml.Conditions conditions_options do
+            xml.AudienceRestriction do
+              xml.Audience request.issuer
+            end
+          end
         end
       end
       xml.target!
@@ -82,6 +87,13 @@ class SamlResponse
       }
     end
 
+    def conditions_options
+      {
+        NotBefore: 5.seconds.ago.utc.iso8601,
+        NotOnOrAfter: 3.hours.from_now.utc.iso8601,
+      }
+    end
+
     def name_id_format
       "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
     end
spec/models/saml_response_spec.rb
@@ -4,7 +4,7 @@ describe SamlResponse do
   describe ".for" do
     subject { described_class }
     let(:user) { double(:user, uuid: SecureRandom.uuid) }
-    let(:request) { double(id: SecureRandom.uuid, acs_url: acs_url) }
+    let(:request) { double(id: SecureRandom.uuid, acs_url: acs_url, issuer: FFaker::Movie.title) }
     let(:acs_url) { "https://#{FFaker::Internet.domain_name}/acs" }
     let(:issuer) { FFaker::Movie.title }
 
@@ -79,6 +79,10 @@ describe SamlResponse do
       expect(hash['Response']['Assertion']['Subject']['SubjectConfirmation']['SubjectConfirmationData']['NotOnOrAfter']).to eql(3.hours.from_now.utc.iso8601)
       expect(hash['Response']['Assertion']['Subject']['SubjectConfirmation']['SubjectConfirmationData']['Recipient']).to eql(acs_url)
       expect(hash['Response']['Assertion']['Subject']['SubjectConfirmation']['SubjectConfirmationData']['InResponseTo']).to eql(request.id)
+
+      expect(hash['Response']['Assertion']['Conditions']['NotBefore']).to eql(5.seconds.ago.utc.iso8601)
+      expect(hash['Response']['Assertion']['Conditions']['NotOnOrAfter']).to eql(3.hours.from_now.utc.iso8601)
+      expect(hash['Response']['Assertion']['Conditions']['AudienceRestriction']['Audience']).to eql(request.issuer)
     end
   end
 end