Commit 0658a93
Changed files (3)
app
models
spec
models
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