Commit 0658a93

mo <mo.khan@gmail.com>
2017-10-22 22:06:56
add attributes.
1 parent bc8d4b3
Changed files (3)
app/models/namespaces.rb
@@ -26,6 +26,7 @@ module Namespaces
   module Formats
     module Attr
       URI = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
+      BASIC = "urn:oasis:names:tc:SAML:2.0:attrname-format:basic"
     end
 
     module NameId
app/models/saml_response.rb
@@ -50,6 +50,13 @@ class SamlResponse
               xml.AuthnContextClassRef Namespaces::AuthnContext::ClassRef::PASSWORD
             end
           end
+          xml.AttributeStatement do
+            user.assertion_attributes.each do |key, value|
+              xml.Attribute Name: key, NameFormat: Namespaces::Formats::Attr::URI, FriendlyName: key do
+                xml.AttributeValue value.to_s
+              end
+            end
+          end
         end
       end
       xml.target!
spec/models/saml_response_spec.rb
@@ -3,10 +3,11 @@ require 'rails_helper'
 describe SamlResponse do
   describe ".for" do
     subject { described_class }
-    let(:user) { double(:user, uuid: SecureRandom.uuid) }
+    let(:user) { double(:user, uuid: SecureRandom.uuid, assertion_attributes: { email: email, created_at: Time.now.utc.iso8601 }) }
     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 }
+    let(:email) { FFaker::Internet.email }
 
     <<-XML
 <samlp:Response 
@@ -88,6 +89,16 @@ describe SamlResponse do
       expect(hash['Response']['Assertion']['AuthnStatement']['SessionNotOnOrAfter']).to eql(3.hours.from_now.utc.iso8601)
       expect(hash['Response']['Assertion']['AuthnStatement']['SessionIndex']).to eql(hash['Response']['Assertion']['ID'])
       expect(hash['Response']['Assertion']['AuthnStatement']['AuthnContext']['AuthnContextClassRef']).to eql('urn:oasis:names:tc:SAML:2.0:ac:classes:Password')
+
+      expect(hash['Response']['Assertion']['AttributeStatement']['Attribute'][0]['Name']).to eql('email')
+      expect(hash['Response']['Assertion']['AttributeStatement']['Attribute'][0]['FriendlyName']).to eql('email')
+      expect(hash['Response']['Assertion']['AttributeStatement']['Attribute'][0]['NameFormat']).to eql('urn:oasis:names:tc:SAML:2.0:attrname-format:uri')
+      expect(hash['Response']['Assertion']['AttributeStatement']['Attribute'][0]['AttributeValue']).to eql(email)
+
+      expect(hash['Response']['Assertion']['AttributeStatement']['Attribute'][1]['Name']).to eql('created_at')
+      expect(hash['Response']['Assertion']['AttributeStatement']['Attribute'][1]['FriendlyName']).to eql('created_at')
+      expect(hash['Response']['Assertion']['AttributeStatement']['Attribute'][1]['NameFormat']).to eql('urn:oasis:names:tc:SAML:2.0:attrname-format:uri')
+      expect(hash['Response']['Assertion']['AttributeStatement']['Attribute'][1]['AttributeValue']).to be_present
     end
   end
 end